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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |