2014-09-23 51 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")} 

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