在带有node-mysql的where子句中使用数组

时间:2015-05-27 12:51:16

标签: node.js sails.js waterline node-mysql

我想做一个看起来像这样的查询:

"Select * FROM ... WHERE name in ?" which would be equal to 
"Select * FROM ... WHERE name in 'joe','william', ..."

有没有办法做那样的事情?

Model.query(query, array, function(err, result) {...});

我尝试了以下内容:

string = array.join("','")
Model.query(query, string, function(err, result) {...});

但接下来是我的结果(由于单引号而出现反斜杠):

Select * FROM ... WHERE name in \'joe\',\'william\',..."

2 个答案:

答案 0 :(得分:2)

简单查询

正如@Raphael所提到的,对于简单查询,您可以使用Model.find()relevant docs section

有联接的查询

对于涉及联接的查询,您可以使用find.populate()docs for populate。例如:

Model.find().where({
  attr : [your array]
}).populate('association').exec(your callback);

非常复杂的查询

对于更复杂的查询,甚至连填充都不够,你确实可以使用.query()documentation),但我认为你的语法可能有问题。第二个参数是一个数组。例如:

var title = "The King's Speech";
Movie.query('SELECT * FROM movie WHERE title = $1', [title], function(err, results) {})

答案 1 :(得分:1)

如果您正在使用Waterline(如果您正在创建风帆应用程序,则应该是这种情况),只需执行以下操作:

Model.find().where({
  attr : [your array]
}).exec(your callback);