【问题标题】:Arel: order by association countArel:按关联计数排序
【发布时间】:2011-09-12 17:00:27
【问题描述】:

这就是我想要做的事情

class Question
  has_many :votes
end

class Vote
  belongs_to :question
end

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

有什么办法吗?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 arel


    【解决方案1】:

    尝试下一个:

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

    【讨论】:

    • 你的意思是group("questions.id")
    • 有没有一种简单的方法可以在选择中获取*other question columns*。我想group() 也需要它。
    • @Akshay Rawat 可以试试“questions.*”
    • 作为对比,这种复杂的查询是 SQL 的亮点,您可能想考虑使用原始 SQL。
    【解决方案2】:

    试试这个:

    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 列上添加索引(即使您不使用此解决方案,也应该添加索引)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      相关资源
      最近更新 更多