rails-mysql连接多个表

rails-mysql连接多个表,mysql,ruby-on-rails,ruby-on-rails-2,Mysql,Ruby On Rails,Ruby On Rails 2,我正在做一个基本的报告 显示包含姓名、年龄等详细信息的用户列表 还显示其他详细信息,如帖子数量、上次活动时间等 所有这些其他细节与用户有很多关系 这就是我现在正在做的: User.find( :all, :select => "users.id, users.name, count(distinct(posts.id)) as posts_count", :joins => "left outer join posts

我正在做一个基本的报告

  • 显示包含姓名、年龄等详细信息的用户列表
  • 还显示其他详细信息,如帖子数量、上次活动时间等
  • 所有这些其他细节与用户有很多关系
这就是我现在正在做的:

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"
)
已为posts表中的用户id列编制索引

我的问题是,这样做需要很长时间,当我试图做更多的表以及诸如活动、评论等帖子时,有时会挂起

有没有一种单独加入计数的方法或者其他方法来实现这一点


提前感谢

我认为其中一个可能有效,但与往常一样,在执行外部联接时,查询速度会变慢

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 %>

您认为我应该如何计算帖子数量?对不起,如果我问的是非常基本的问题,那么这种方法有一个问题。。如何根据帖子的数量对用户进行排序?我宁愿不使用ruby对用户进行排序,而是将其卸载到数据库中
@sorted_users = @users.sort_by{|user| user.posts.size }