В моем приложении 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
Я пытаюсь разгрузить как можно большую часть этого запроса в базу данных, но я пытаюсь получить список пользователей, у которых есть более чем 1004 * число контактов через их (потенциально много) групп.
Я могу сделать это с помощью кода 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 не является моей сильной стороной, и, похоже, у меня сегодня умственно отсталый мозг.