Pas*_*zyk 1 ruby mysql sqlite activerecord ruby-on-rails
我想选择评论最高的用户.
评论是有关系的.
我可以通过以下方式查询:
User.first.comments
Run Code Online (Sandbox Code Playgroud)
现在我想选择评论最多的用户.
我不想遍历整个用户表,因为这非常耗时.
也许是这样的:
User.joins(:comments).find(:all, :order => "COUNT(comments) desc")
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
如果无法解决,我会将它们缓存在外部表中.
你应该使用一个计数器缓存,这是一个例子:
class User < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :user, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)
然后,您必须将comments_count列添加到users表,并且每当向用户创建新注释时,此字段将自动递增.最后,您的查询可能是这样的:
User.order( "comments_count desc" ).limit(10).all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |