Arel:按关联计数排序

发布于 2024-12-04 02:44:39 字数 216 浏览 0 评论 0原文

这就是我想要做的

class Question
  has_many :votes
end

class Vote
  belongs_to :question
end

,我想找到按投票数排序的所有问题。我想在 Arel(Rails 3 中)中表达这一点,而不使用任何计数器缓存。

有什么办法可以做到这一点吗?

谢谢。

Here is what I'm trying to do

class Question
  has_many :votes
end

class Vote
  belongs_to :question
end

I want to find all questions ordered by the number of votes they have. I want to express this in Arel (in Rails 3) without using any counter caches.

Is there any way of doing this ?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时常饿 2024-12-11 02:44:39

尝试下一个:

Question.joins(:votes).select("questions.id, *other question coulmns*, count(votes.id) as vote_count").order("vote_count DESC").group("questions.id")

Try next one:

Question.joins(:votes).select("questions.id, *other question coulmns*, count(votes.id) as vote_count").order("vote_count DESC").group("questions.id")
去了角落 2024-12-11 02:44:39

试试这个:

Question.select("questions.*, a.vote_count AS vote_count").
 joins("LEFT OUTER JOIN (
    SELECT b.question_id, COUNT(b.id) AS vote_count
    FROM   votes b
    GROUP BY b.question_id
  ) a ON a.question_id = questions.id")

解决方案与数据库无关。确保在 votes 表中的 question_id 列上添加索引(即使您不使用此解决方案,也应该添加索引)。

Try this:

Question.select("questions.*, a.vote_count AS vote_count").
 joins("LEFT OUTER JOIN (
    SELECT b.question_id, COUNT(b.id) AS vote_count
    FROM   votes b
    GROUP BY b.question_id
  ) a ON a.question_id = questions.id")

Solution is DB agnostic. Make sure you add an index on the question_id column in the votes table( you should add the index even if you don't use this solution).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文