gpt4 book ai didi

ruby-on-rails-3 - 要在查询中逐个元素评估的两个数组

转载 作者:行者123 更新时间:2023-11-29 13:32:23 25 4
gpt4 key购买 nike

抱歉,标题不清楚,但是,我希望正文能清楚地描述我的问题。

所以我有两个数组

title_id: [1542, 1507, 47, 1436, 1527, 3, 173, 1534, 1876, 398]
ref_no: [10, 10, 74, 12, 9, 35, 10, 9, 1, 42]

我想查询第一个数组的索引应该是 AND 与第二个数组的索引。就像如果:title_id = 1542,我只想用 ref_no = 10 与它。等等。

我尝试了以下查询,但它就像乘以索引:

Book.where("title_id IN (?) AND ref_no IN (?) ", @ids.map(&:title_id), @ids.map(&:ref_no))

使用:RoR 3、PGSQL

最佳答案

这种事情在 PostgreSQL 风格的 SQL 中非常容易。您可以像这样加入一个 VALUES 表达式:

select books.*
from books b
join (values (1542, 10), (1507, 10), ...) as dt(t, r)
on b.title_id = dt.t and b.ref_no = dt.r

或者您可以使用 ANY 和数组或 IN:

where (title_id, ref_no) = any (array[(1542,10), (1507, 10), ...])

where (title_id, ref_no) in ((1542,10), (1507, 10), ...)

或者通常的一大堆 OR:

where (title_id = 1542 and ref_no = 10)
or (title_id = 1507 and ref_no = 10)
or ...

第二个选项(IN 变体):

where (title_id, ref_no) in ((1542,10), (1507, 10), ...)

最符合您的 IMO 意图。我想不出任何令人愉快的方式让 AR 来构建它,但是,由于我们正在处理整数并且不必担心引用和转义问题,我们可以通过一些字符串整理来完成:

trs = @ids.map { |o| "(#{o.title_id.to_i}, #{o.ref_no.to_i})" }.join(',')
Book.where("(title_id, ref_no) in (#{trs})")

你可能会用一些长链不可理解的 AREL 调用构建 OR 版本,但当事情变得比婴儿谈话更复杂时,我倾向于放弃 AR 并直接使用 SQL a = b and c = d AR要说的SQL。

关于ruby-on-rails-3 - 要在查询中逐个元素评估的两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com