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

ruby – 续集数据集的布尔组合

发布时间:2020-12-17 02:06:11 所属栏目:百科 来源:网络整理
导读:鉴于我有一些数据集方法foo,bar和baz 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
鉴于我有一些数据集方法foo,bar和baz

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)

(编辑:李大同)

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

    推荐文章
      热点阅读