在SQLite中给出以下(已经简化的)查询:
def self.calculate(year, month, user_id, partner_id)
where(':user_id = entries.user_id OR :partner_id = entries.user_id', {
:user_id => user_id,
:partner_id => partner_id
}).
where('entries.date <= :last_day', {
:last_day => Date.new(year, month, 1).at_end_of_month
}).
select('sum(case when joint = "f" and user_id = :user_id then amount_calc else 0 end) as sum_single' , {
:user_id => user_id
}).
group("strftime('%Y-%m', date)")
end
完整查询在不同的when语句中有更多的和,其中一些取决于它是user_id还是partner_id。不幸的是,Rails会报错,因为select不像where那样使用替换来接受第二个参数。是否有任何方法来实现我想要的,而不运行两个查询,一个为user_id和一个为partner_id?
人可以如此盲目....而不是:
select('sum(case when joint = "f" and user_id = :user_id then amount_calc else 0 end) as sum_single' , {
:user_id => user_id
}).
只是构建字符串:
select('sum(case when joint = "f" and user_id = ' + user_id.to_s + ' then amount_calc else 0 end) as sum_single').
由于没有人回答,这是为了存档:)
编辑:对不起,请注意:如下所述,这是脆弱的