mysql - rails - mysql连接多个表

标签 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"
)

已将 posts 表中的 user_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 %>

用户按帖子排序

@sorted_users = @users.sort_by{|user| user.posts.size }

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

关于mysql - rails - mysql连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576769/

相关文章:

MySQL 查询其中列可能缺失

ruby-on-rails - 在 Rails 2.3 中从一个数据库读取并写入另一个数据库

ruby - pry 在 Rails 2 上工作吗?

ruby-on-rails - 为什么 Rails 可以使用 `if` 作为哈希键但在 Ruby 中不能

ruby-on-rails - Ruby 和 Ruby on Rails Windows 安装程序修改了哪些注册表值?

mysql - 将表数据迁移到其他表的最佳方法

mysql - ft_min_word_len=3 三个字符不匹配

php - WordPress 类别元数据

MySQL 强制索引不起作用

jquery - 将 Turbolinks 与 Rails select 和 jQuery 一起使用