0

我正在尝试在 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 在查询中需要多个条件。除了将第一个条件放入 awhere并将其余的放入 a之外or,这有点难看:

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

有更好的方法吗?

4

1 回答 1

0

最简单的做法是将单个查询的结果收集到一个数组中,这与在一个查询中将所有 AND 子句进行 OR-ing 相同:

results = conditions.map{|c| query.where(c).all}.flatten
于 2013-01-16T05:37:52.807 回答