mysql - Rails 3根据关联计数进行查询

标签 mysql ruby ruby-on-rails-3

在带有 mysql 的 Rails 3 中,假设我有两个模型,Customers 和 Purchases,显然是 purchase belongs_to customer。我想找到所有有 2 个或更多订单的客户。我可以简单地说:

Customer.includes(:purchases).all.select{|c| c.purchases.count > 2}

实际上,上面的行对 Customer.all 和 Purchase.all 的大小进行了查询,然后在 ruby​​ 中进行了“选择”类型的处理。在大型数据库中,我更愿意避免在 ruby​​ 中进行所有这些“选择”计算,让 mysql 进行处理,只给我合格客户的列表。这既要快得多(因为 mysql 更适合这样做)并且显着减少了数据库的带宽。

不幸的是,我无法用 Rails 中的构建 block (在哪里、拥有、组等)中编写代码来实现这一点,类似于(伪代码):

Customer.joins(:purchases).where("count(purchases) > 2").all

我会满足于直接的 MySql 解决方案,尽管我更喜欢在优雅的 rails 框架中解决这个问题。

最佳答案

无需安装 gem 即可使用(尽管 metawhere 很酷)

Customer.joins(:purchases).group("customers.id").having("count(purchases.id) > ?",0)

关于mysql - Rails 3根据关联计数进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6313621/

相关文章:

mysql - 在表之间复制数据时出现错误 1062 重复条目

php - 根据下拉菜单中选定的选项查看数据库中的数据

ruby-on-rails-3 - 找到最接近整数的最有效方法?

mysql - mysql查询中的复杂搜索问题

MySQL 插入中选择

ruby - 为什么 Middleman 在安装后不包含 rb-inotify 和 therubyracer gem?

ruby - 在两个 Ruby 脚本之间交换消息

ruby-on-rails - 将 attr_encrypted 与客户提供的 key 一起使用(未存储在数据库中)

ruby-on-rails - 此交易无效。请返回收件人的网站并重试

ruby-on-rails - 如何在 ruby​​/rails 中将多个参数传递给 Proc?