gpt4 book ai didi

ruby - Sequel 数据集的 bool 组合

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:52 25 4
gpt4 key购买 nike

鉴于我有一些数据集方法 foo , barbaz

class User < Sequel::Model
dataset_module do
def foo
# Some complicated dataset here
where(:c => 42, :d => 23)
end

def bar
# Even more complicated dataset here
where(:a => 5, :b => 23).or(:a => 23, :b => 5)
end

def baz
where(:d => 17)
end
end
end

我想在数据库中查询 (foo || bar) && (bar || baz) (或其他一些复杂的数据集)。所以我尝试了

User.where{|u| (u.foo | u.bar) & (u.bar | u.baz)}

编辑:澄清:

我得到了什么

SELECT * FROM users WHERE ((`foo` OR `bar`) AND (`bar` OR `baz`))

我想要的

SELECT * FROM users WHERE ((<dataset foo> OR <dataset bar>) AND (<dataset bar> OR <dataset baz>))

哪里<dataset xyz>表示我定义的数据集。所以

<dataset foo>定义为 (c = 42 AND d = 23)

<dataset bar>定义为 ((a = 5 AND b = 23) OR (a = 23, b = 5))

<dataset baz>定义为 (d = 17)

如何将数据集方法与 AND 链接起来, OR和(最重要的)括号?

最佳答案

您不是在寻找并集和交集方法吗?它们适用于数据集,可用作集合论中“AND”和“OR”的替代品。

这样的事情不适合你吗?

fooOrbar = User.foo.union(User.bar)
barOrbaz = User.bar.union(User.baz)
result = fooOrbar.intersect(barOrbaz)

关于ruby - Sequel 数据集的 bool 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22634729/

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