rails - mysql连接多个表

时间:2012-09-25 05:38:25

标签: mysql ruby-on-rails ruby-on-rails-2

我想在这里做一个基本的报告

  • 显示包含姓名,年龄等详细信息的用户列表。
  • 还会显示其他详细信息,如帖子数量,上次活动时间等。
  • 所有其他详细信息均来自用户
  • 的has_many关系

这就是我现在正在做的事情:

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 列编入索引

我的问题是这需要花费很长时间才能完成,有时候当我尝试做更多的表以及活动,评论等帖子时会挂起。

有没有办法单独加入计数或其他方式来实现这一目标?

提前致谢

1 个答案:

答案 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 }

https://stackoverflow.com/a/5739222/1354978