【发布时间】:2021-01-15 14:41:46
【问题描述】:
在我正在构建的应用程序中,有帖子和标签,它们通过多对多关系连接。我想要做的是向用户显示所有标签,并根据他们有多少已发布的帖子对其进行排序(由帖子表中的 is_published 列确定)。
现在我正在使用此代码按照他们一般拥有的帖子数量(已发布和未发布)对它们进行排序:
scope :top_used, -> { left_joins(:posts).group(:id).order("COUNT(posts.id) DESC") }
翻译成 MySQL:
SELECT t.*
FROM tags t
LEFT
JOIN post_tags pt
ON pt.tag_id = tags.id
LEFT
JOIN posts p
ON p.id = pt.post_id
GROUP
BY t.id
ORDER
BY COUNT(p.id) DESC
所以,我需要按已发布帖子的数量而不是所有帖子的数量来排序。这可以在 MySQL 中完成吗?
【问题讨论】:
标签: mysql ruby-on-rails activerecord ruby-on-rails-6