Rails多列IN子句

时间:2014-06-04 01:47:41

标签: mysql ruby-on-rails ruby-on-rails-4.1

我有一个User模型,其中包含first_namelast_name个属性,我想查找在给定数组中包含其中一个名称的所有Users。例如,如果我的数组是[“John Doe”,“Mary Jane”,“Little John”],我会想要执行以下mysql查询

SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))

是否有以友好的方式编写此查询?

1 个答案:

答案 0 :(得分:3)

你的数组是这样的:

my_array = ["John Doe", "Mary Jane", "Little John"]
my_array.collect{|m| m.split(" ")}

上面的代码构建了2D数组。在上面的代码 my_array vaue之后:

[["John", "Doe"], ["Mary", "Jane"], ["Little", "John"]]

现在用括号替换方括号:

resultable_key = my_array.inspect.gsub("[","(").gsub("]", ")")

查询构建完成。现在在db:

中进行查询
User.where("(first_name, last_name) IN #{resultable_key}")

这与您的查询完全相同:

SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))