在带有 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/