这个查询我做错了什么?

时间:2010-10-16 12:57:21

标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-3

目标:获取每个用户以最少的时间正确回答的N 随机问题列表。

以下sql将为我提供一个列表,其中包含对user_id 4的正确回答问题的计数。

select q.id, temp.Count
from questions as q
left join
(select q.id, count(a.id) as count
from questions as q
left join attempts as a
on a.question_id = q.id
where a.correct = true and a.user_id = 4
group by q.id)
temp on temp.id = q.id
order by count desc

现在,在铁轨中,我得到了:

c = Question.find :all, 
:joins => "LEFT JOIN attempts ON attempts.question_id = questions.id", 
:select => "questions.id, count(attempts.id)", 
:group => "questions.id", 
:conditions => ["attempts.correct = true AND attempts.user_id = ?", @user.id]

但这会给我一个只有1条记录的列表,而不是我以前在psql控制台中获得的43条记录。

输出:

c = Question.find :all, :joins => "LEFT JOIN attempts ON attempts.question_id = questions.id", :select => "questions.id, count(attempts.id)", :group => "questions.id", :conditions => "attempts.correct = true AND attempts.user_id = 4"
=> [#<Question id: 112>]

不带输出:条件:

b
=> [{"id"=>"69", "count"=>nil}, {"id"=>"70", "count"=>nil}, {"id"=>"71", "count"=>nil}, {"id"=>"72", "count"=>nil}, {"id"=>"73", "count"=>nil}, {"id"=>"74", "count"=>nil}, {"id"=>"75", "count"=>nil}, {"id"=>"76", "count"=>nil}, {"id"=>"77", "count"=>nil}, {"id"=>"78", "count"=>nil}, {"id"=>"80", "count"=>nil}, {"id"=>"81", "count"=>nil}, {"id"=>"82", "count"=>nil}, {"id"=>"83", "count"=>nil}, {"id"=>"84", "count"=>nil}, {"id"=>"85", "count"=>nil}, {"id"=>"86", "count"=>nil}, {"id"=>"87", "count"=>nil}, {"id"=>"88", "count"=>nil}, {"id"=>"89", "count"=>nil}, {"id"=>"90", "count"=>nil}, {"id"=>"91", "count"=>nil}, {"id"=>"92", "count"=>nil}, {"id"=>"93", "count"=>nil}, {"id"=>"94", "count"=>nil}, {"id"=>"95", "count"=>nil}, {"id"=>"96", "count"=>nil}, {"id"=>"97", "count"=>nil}, {"id"=>"98", "count"=>nil}, {"id"=>"99", "count"=>nil}, {"id"=>"100", "count"=>nil}, {"id"=>"101", "count"=>nil}, {"id"=>"102", "count"=>nil}, {"id"=>"103", "count"=>nil}, {"id"=>"104", "count"=>nil}, {"id"=>"105", "count"=>nil}, {"id"=>"106", "count"=>nil}, {"id"=>"107", "count"=>nil}, {"id"=>"108", "count"=>nil}, {"id"=>"109", "count"=>nil}, {"id"=>"110", "count"=>nil}, {"id"=>"111", "count"=>nil}, {"id"=>"112", "count"=>"2"}]

也许很重要:大多数记录的最终结果为'count'。如果还没有回答,我似乎无法为他们设置0。

但是,就轨道问题而言:我猜这是因为:条件。我究竟做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果您在Question模型上调用find方法,那么questions.id组可能会在查询中应用于问题表,而不是在上面写的内部查询中(因此没有效果)。

你的rails代码生成的sql是什么?您应该能够在rails日志中看到这一点。