连接表,计数和组以返回模型

时间:2012-01-26 19:17:42

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

所以我有一个我想在rails中复制的SQL查询:

select g.* 
from gamebox_favorites f 
inner join gameboxes g on f.gamebox_id = g.id 
group by f.gamebox_id 
order by count(f.gamebox_id) desc;

我一直在阅读rails的Active Record Query Interface网站,但似乎无法把它放在一起。我希望查询返回Gamebox记录的集合,按游戏盒的“收藏夹”数量排序。在rails中最干净的方法是什么?

1 个答案:

答案 0 :(得分:0)

我相信这会起作用(在本地使用类似结构的数据库),虽然我不确定我在适当的位置有适当的模型,但是你可能需要移动一个周围的事情:

Gamebox.joins(:gamebox_favorites).
  group('"gamebox_favorites"."gamebox_id"').
  order('count("gamebox_favorites"."gamebox_id")')

在控制台上,应该编译为(在后端的PostgreSQL的情况下):

SELECT "gameboxes".* FROM "gamebox_favorites" 
  INNER JOIN "gamebox_favorites" 
  ON "gamebox_favorites"."gamebox_id" = "gamebox"."id" 
  GROUP BY "gamebox_favorites"."gamebox_id" 
  ORDER BY count("gamebox_favorites"."gamebox_id")

...而且我猜你不想把它包裹在find_by_sql电话中,例如:

Gamebox.find_by_sql("select g.* from gamebox_favorites f 
  inner join gameboxes g 
  on f.gamebox_id = g.id 
  group by f.gamebox_id 
  order by count(f.gamebox_id) desc")