【问题标题】:Rails multi-column IN clauseRails 多列 IN 子句
【发布时间】:2014-06-04 01:47:41
【问题描述】:

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

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

有没有一种 Rails 友好的方式来编写这个查询?

【问题讨论】:

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


    【解决方案1】:

    你的数组是这样的:

    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("]", ")")
    

    查询构建完成。现在在 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')))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 2016-10-23
      • 2019-06-24
      • 2017-11-26
      • 2012-10-13
      • 2021-10-15
      • 2019-02-15
      相关资源
      最近更新 更多