我想在这里做一个基本的报告
这就是我现在正在做的事情:
User.find(
:all,
:select => "users.id, users.name, count(distinct(posts.id)) as posts_count",
:joins => "left outer join posts on posts.user_id = users.id",
:group => "users.id",
:limit => "100"
)
已将帖子表
中的 user_id 列编入索引我的问题是这需要花费很长时间才能完成,有时候当我尝试做更多的表以及活动,评论等帖子时会挂起。
有没有办法单独加入计数或其他方式来实现这一目标?
提前致谢
答案 0 :(得分:1)
我认为其中一个可能有效,但在执行外连接时,查询将会更慢。
User.count(:include=>[:posts])
User.count(:select => "users.id, users.name, count(distinct(posts.id)) as posts_count",
:joins => "left outer join posts on posts.user_id = users.id",
:group => "users.id")
User.find(:all, :include => [:posts])
您也可以输入初始化文件或irbrc文件:
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.clear_active_connections!
在您在控制台中输入查询时检查查询。
对于帖子计数
User.all.posts.size
至于稍后报告每个帖子的数量,您可以使用您已经拥有的用户记录来执行此操作。
@users = User.find(:all, :include=> [:posts])
稍后......
<% @users.each do |user|
Posts: <%= user.posts.size %>
<% end %>
按帖子排序的用户
@sorted_users = @users.sort_by{|user| user.posts.size }