使用WITH和OR进行续集查询链接

时间:2013-01-15 00:15:30

标签: sequel

我正在尝试在续集中构建一个查询,这会让我有点麻烦。

基本上我有几个哈希值,每个哈希值包含几个条件。每个哈希中的条件需要在自身内部进行AND,并在每组条件中进行OR。

例如:

conditions = [
  { :id => 123, :published => true },
  { :id => 456, :published => false }
]

应该生成:

SELECT * FROM item WHERE ((id = 123 AND published = true) OR (id = 456 AND published = false))

我有:

conditions.each do |condition|
  query = query.where(condition)
end

这将把所有东西放在一起,所以:

conditions.each do |condition|
  query = query.or(condition)
end

引发错误,因为OR在查询中需要多个条件。除了将第一个条件弹出到where而将其余条件弹出到or之外,这会有点难看:

query.where(condition.first)
conditions[1..-1].each do |condition|
  query = query.or(condition)
end

有更好的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

最简单的方法就是将单个查询的结果收集到一个数组中,该数组与在一个查询中将所有AND子句一起进行OR运算相同:

results = conditions.map{|c| query.where(c).all}.flatten