我有一个带有 first_name
和 last_name
属性的 User
模型,我想找到所有具有给定数组中的名称之一。例如,如果我的数组是 ["John Doe", "Mary Jane", "Little John"],我想执行以下 mysql
查询
SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))
是否有一种 Rails 友好的方式来编写此查询?
最佳答案
你的数组是这样的:
my_array = ["John Doe", "Mary Jane", "Little John"]
my_array.collect{|m| m.split(" ")}
以上代码构建二维数组。在上面的代码之后 my_array 值是:
[["John", "Doe"], ["Mary", "Jane"], ["Little", "John"]]
现在用括号替换方括号:
resultable_key = my_array.inspect.gsub("[","(").gsub("]", ")")
查询构建完成。现在在数据库中进行查询:
User.where("(first_name, last_name) IN #{resultable_key}")
这与您的查询完全相同:
SELECT (*) FROM `users` WHERE ((first_name, last_name) IN (('John', 'Doe'), ('Mary, Jane'), ('Little', 'John')))
关于mysql - Rails 多列 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027746/