加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 活动记录 – 其中IN包含多列

发布时间:2020-12-17 03:57:00 所属栏目:百科 来源:网络整理
导读:我有一个查询需要从一个完全满足两列要求的表中获取.所以,如果我有用户表,列,年龄和分数. SELECT * FROM users where (age,score) IN ((5,6),(9,12),(22,44)..) 在我的网络应用程序中,我从ajax请求得到这对,并且数量可能非常大.如何为此构建Active Record查
我有一个查询需要从一个完全满足两列要求的表中获取.所以,如果我有用户表,列,年龄和分数.

SELECT * FROM users where (age,score) IN ((5,6),(9,12),(22,44)..)

在我的网络应用程序中,我从ajax请求得到这对,并且数量可能非常大.如何为此构建Active Record查询?

我正在研究postgres数据库

解决方法

理想情况下,我们将根据输入构建一个查询字符串.例如

ages_and_scores = [ [5,6],[9,12],[22,44] ]
query_string = ages_and_scores.map do |pair|
  "(age = #{pair[0]} AND score = #{pair[1]})"
end.join(" OR ")
# => (age = 5 AND score = 6) OR (age = 9 AND score = 12) OR (age = 22 AND score = 44)

最后,您的查询将是

User.where(query_string)

您可以更正如何构建查询字符串的逻辑,因为ages_and_scores与我的示例的格式不同.

起色

ages_and_scores = [ [5,44] ]
query_params = []

query_template = ages_and_scores.map{ |_| "(age = ? AND score = ?)" }.join(" OR ")
# => (age = ? AND score = ?) OR (age = ? AND score = ?) OR (age = ? AND score = ?)

User.where(query_template,*ages_and_scores.flatten)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读