2011-03-18 67 views
2

我有以下表格:用户(id),文章(id),收藏夹(article_id,user_id)。我需要列出当前用户添加到收藏夹的文章,并附上一个标志,指明他们是否也被其他用户收藏。 SQL很简单:自加入导轨

select articles.id, count(f2.article_id) 
from articles a 
inner join favorites f1 on f1.article_id = a.id 
left join favorites f2 on f1.article_id = f2.article_id and not f1.user_id = f2.user_id 
where f1.user_id = 1 
group by a.id 

有没有办法使用Rails查询生成器?

回答

2

这样的事应该让你对你的方式(假设你有一篇文章,收藏模型/表):

t = Article.joins("INNER JOIN #{Favorite.table_name} AS f1 on f1.article_id = #{Article.table_name}.id") 
t = t.joins("LEFT JOIN #{Favorite.table_name} AS f2 on f1.article_id = f2.article_id AND NOT f1.user_id = f2.user_id") 
t = t.where("f1.user_id = ?", 1) 
t = t.group("#{Article.table_name}.id") 
t.select("#{Article.table_name}.id, COUNT(f2.article_id)") 
+0

我想这是唯一的办法,谢谢。 – synapse 2011-03-21 15:02:36