2011-03-18 104 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