我有以下表:users(id),articles(id),favorites(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查询生成器?
答案 0 :(得分: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)")