sql - Rails 嵌套连接与包含嵌套连接表计数的 where

标签 sql ruby-on-rails-3 activerecord arel

我的 Rails 3 应用程序中有以下模型设置:

class User << AR::Base
  has_many :groups
end

class Group << AR::Base
  belongs_to :user
  has_many :memberships
  has_many :contacts, :through => :memberships
end

class Membership << AR::Base
  belongs_to :group
  belongs_to :contact
end

class Contact << AR::Base
  has_many :memberships
  has_many :groups, :through => :memberships
end

我正在尝试尽可能多地将此查询卸载到数据库中,但我正在尝试通过他们的(可能很多)组获取拥有超过 x 个联系人的用户列表.

我可以通过 ruby​​/rails 代码毫无问题地做到这一点,但它会将所有内容加载到内存中,这对于较大的数据集来说可能会很痛苦。

x = 4 # or whatever
User.all.select{ |u| u.groups.collect(&:contacts).flatten.uniq.size > x }

我尝试过类似下面的操作,但没有成功:

User.joins(:groups => :contacts).where('count(contacts.id) > ?', x)

另外,联系人最好能区分

在正确方向上的任何类型的观点都会很棒,sql 不是我的强项之一,看来我今天脑残了。

最佳答案

在为此苦苦挣扎了一会儿之后,我得到了一些帮助,并且能够像这样完成我的查询

User.select("users.*, count(distinct contacts.id) as num").joins(:groups => :contacts).group('users.id').having('num > 10')

关于sql - Rails 嵌套连接与包含嵌套连接表计数的 where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7988445/

相关文章:

mysql - 将电子邮件 VARCHAR(320) 存储为 UNIQUE,#1071 - 指定的键太长;最大 key 长度为 767

mysql - 最近发布帖子的用户返回结果的速度比旧帖子的用户要快得多

php - 使用 mysql 和 count request 时出现问题

ruby-on-rails-3 - 如何取消 before_add 关联回调中的保存?

ruby-on-rails - 使用named_scope的加性链接

sql - 无法将用户定义的记录插入表中

ruby - 单元测试中应该父类(super class)不匹配

ruby - 如何以编程方式删除图像的背景,使其在 ruby​​ 中透明?

ruby-on-rails - Rails has_many :through

php - Codeigniter DB 查询链接先前调用中的错误数据