2014-09-23 57 views
0

我想讓所有按喜好數排序的電影(即使他們沒有喜歡)。我有以下工作SQL語句:活動記錄查詢接口。 Count,Join&Group

 SELECT *, COUNT(case when movie_votes.like = 1 then 1 end) AS count_likes 
     FROM movies 
     LEFT OUTER JOIN movie_votes 
     ON movie_votes.movie_id = movies.id 
     GROUP BY movie_id 
     ORDER BY count_likes; 

而我想在我的控制器中實現它。到目前爲止,我有:

 Movie.select("*, COUNT(case when 'movie_votes'.'like'=1 then 1 end) AS   count_likes").joins("LEFT OUTER JOIN 'movie_votes' ON 'movies'.'id'='movie_votes'.'movie_id'").group("'movie_id'") 

,輸出形式控制檯:

 SELECT *, COUNT(case when 'movie_votes'.'like'=1 then 1 end AS count_likes FROM `movies` LEFT OUTER JOIN 'movie_votes' ON 'movie'.'id'='movie_votes'.'movie_id' GROUP BY 'movie_id' 

和Mysql2 ::錯誤:你在你的SQL語法錯誤; 我做錯了什麼沒有語法?

+0

結束括號後失蹤 – radar 2014-09-23 12:07:10

+0

感謝Rajesh!但我仍然在犯錯誤.. – gematzab 2014-09-23 12:30:10

+0

你能分享電影和movie_votes的模式嗎? – 2014-09-25 09:41:08

回答

0

對於那些誰可能會發現這個有用:

scope :order_by_likes_or_hates, lambda {|type| 
     select("*, COUNT(case when movie_votes.like=#{type} then 1 end) AS count_likes").joins("LEFT OUTER JOIN movie_votes ON movies.id=movie_votes.movie_id").group("movie_votes.movie_id").order("count_likes DESC")} 

如果有人能提供更加清晰的版本,請做。