在基线中使用 And
Use And in Waterline
这是我使用水线的查询
var queryObject = {
where: {
or: [
{firstName: {'contains': search}},
{lastName: {'contains': search}},
{email: {'contains': search}},
],
and: [
{authType:'google'},
{dealershipcompany: 11}
]
}
}
但添加 'and' return 一个错误:
error: Sending 500 ("Server Error") response:
Error (E_UNKNOWN) :: Encountered an unexpected error
: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object Object],[object Object])' at line 1
at Query.Sequence._packetToError (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Query.ErrorPacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Query.js:83:18)
at Protocol._parsePacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:274:23)
at Parser.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:96:28)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
at Socket.Readable.push (_stream_readable.js:128:10)
at TCP.onread (net.js:529:21)
--------------------
at Protocol._enqueue (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at PoolConnection.query (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:201:25)
at Array.async.auto.processParent [as 0] (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:586:24)
at /vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:574:38
at _arrayEach (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:78:13)
at Object.async.auto (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:536:9)
at Cursor.populateBuffers [as $populateBuffers] (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:581:19)
at Cursor.run (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/waterline-cursor/cursor/cursor.js:45:8)
at runJoins (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/waterline-cursor/index.js:51:10)
at __JOIN__ (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:514:9)
at afterwards (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/connections/spawn.js:84:5)
at /vagrant/sharpOne_app/node_modules/sails-mysql/lib/connections/spawn.js:40:7
at Ping.onOperationComplete [as _callback] (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Pool.js:99:5)
at Ping.Sequence.end (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
at Ping.Sequence.OkPacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:105:8)
at Protocol._parsePacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:274:23)
at Parser.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:96:28)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
Details: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object Object],[object Object])' at line 1
如何在水线中正确使用AND,很明显sails-mysql支持'and',但我不知道是什么原因导致错误,'or'有效完全没有问题,我不能链接到哪里,因为水线只给我最后一个地方的结果。
我正在使用 Sails v10.4 和 sails-mysql v0.11.2,我想使用它的查询如下:
SELECT * FROM user where (firstName LIKE '%search%' OR lastName LIKE '%search%' OR email LIKE '%search%') AND (authType='google' OR dealershipcompany = 11);
它 returns 结果是人们的 authType 为 google 或经销商公司编号为 11
您不必明确指定 and
,因为水线将完全*匹配您作为普通密钥对包含的内容 (waterline docs)
这应该可以解决问题:
var queryObject = {
where: {
or: [
{firstName: {'contains': search}},
{lastName: {'contains': search}},
{email: {'contains': search}},
],
authType: 'google',
dealershipcompany: 11
}
}
这将匹配 authType
完全 'google'
和 dealership company
完全 的记录11
然后匹配 or
.
中的任何内容
*我相信水线查询是 case-insensitive。
编辑:删除错误 {}
我到达这里是为了寻找 between
水线。对范围查询很有用。
下面的代码片段有效。也应该适用于其他 criteria modifiers.
userId: { '<=': 100, '>': 10 }
构建查询时可以使用以下修饰符。
'<' / 'lessThan'
'<=' / 'lessThanOrEqual'
'>' / 'greaterThan'
'>=' / 'greaterThanOrEqual'
'!' / 'not'
'like'
'contains'
'startsWith'
'endsWith'
这是我使用水线的查询
var queryObject = {
where: {
or: [
{firstName: {'contains': search}},
{lastName: {'contains': search}},
{email: {'contains': search}},
],
and: [
{authType:'google'},
{dealershipcompany: 11}
]
}
}
但添加 'and' return 一个错误:
error: Sending 500 ("Server Error") response:
Error (E_UNKNOWN) :: Encountered an unexpected error
: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object Object],[object Object])' at line 1
at Query.Sequence._packetToError (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Query.ErrorPacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Query.js:83:18)
at Protocol._parsePacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:274:23)
at Parser.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:96:28)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
at Socket.Readable.push (_stream_readable.js:128:10)
at TCP.onread (net.js:529:21)
--------------------
at Protocol._enqueue (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at PoolConnection.query (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:201:25)
at Array.async.auto.processParent [as 0] (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:586:24)
at /vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:574:38
at _arrayEach (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:78:13)
at Object.async.auto (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/async/lib/async.js:536:9)
at Cursor.populateBuffers [as $populateBuffers] (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:581:19)
at Cursor.run (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/waterline-cursor/cursor/cursor.js:45:8)
at runJoins (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/waterline-cursor/index.js:51:10)
at __JOIN__ (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/adapter.js:514:9)
at afterwards (/vagrant/sharpOne_app/node_modules/sails-mysql/lib/connections/spawn.js:84:5)
at /vagrant/sharpOne_app/node_modules/sails-mysql/lib/connections/spawn.js:40:7
at Ping.onOperationComplete [as _callback] (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Pool.js:99:5)
at Ping.Sequence.end (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
at Ping.Sequence.OkPacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:105:8)
at Protocol._parsePacket (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:274:23)
at Parser.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/vagrant/sharpOne_app/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:96:28)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
Details: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object Object],[object Object])' at line 1
如何在水线中正确使用AND,很明显sails-mysql支持'and',但我不知道是什么原因导致错误,'or'有效完全没有问题,我不能链接到哪里,因为水线只给我最后一个地方的结果。
我正在使用 Sails v10.4 和 sails-mysql v0.11.2,我想使用它的查询如下:
SELECT * FROM user where (firstName LIKE '%search%' OR lastName LIKE '%search%' OR email LIKE '%search%') AND (authType='google' OR dealershipcompany = 11);
它 returns 结果是人们的 authType 为 google 或经销商公司编号为 11
您不必明确指定 and
,因为水线将完全*匹配您作为普通密钥对包含的内容 (waterline docs)
这应该可以解决问题:
var queryObject = {
where: {
or: [
{firstName: {'contains': search}},
{lastName: {'contains': search}},
{email: {'contains': search}},
],
authType: 'google',
dealershipcompany: 11
}
}
这将匹配 authType
完全 'google'
和 dealership company
完全 的记录11
然后匹配 or
.
*我相信水线查询是 case-insensitive。
编辑:删除错误 {}
我到达这里是为了寻找 between
水线。对范围查询很有用。
下面的代码片段有效。也应该适用于其他 criteria modifiers.
userId: { '<=': 100, '>': 10 }
构建查询时可以使用以下修饰符。
'<' / 'lessThan'
'<=' / 'lessThanOrEqual'
'>' / 'greaterThan'
'>=' / 'greaterThanOrEqual'
'!' / 'not'
'like'
'contains'
'startsWith'
'endsWith'