mysql - Rails 多列 IN 子句

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

我有一个带有 first_namelast_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/

相关文章:

mysql - Spring Petclinic (Spring Boot) 中的数据库连接问题

mysql - SQL 查询查找连续行中的数字序列

ruby-on-rails - 使用 ActiveRecord 获取 parent 集合的 child

ruby-on-rails - 在 Rails 3 的国家/地区表中将长国家/地区名称显示为短国家/地区名称

ruby-on-rails - 用户的未定义方法 attr_accessible 错误

MySQL添加ORDER BY时报错126

ruby-on-rails - 检查一个字符串中的单词是否在另一个字符串中的最快方法是什么?

ruby-on-rails - 在 Postgres 中使用 Rails 数组

ruby-on-rails - 在模型中使用 accepts_nested_attributes_for 时出现 Rails 4.1 错误

php - 按引用对列表进行排序