我想查询两个用户之间的公共(public)组。
这是我的模型:
用户模型
class User < ActiveRecord::Base
has_many :group_memberships
has_many :groups, through: :group_memberships
end
组模型
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, through: :group_memberships
end
连接用户和组之间的表模型
class GroupMembership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
比方说,我有两个用户 A 和 B,我想获得用户 A 和用户 B 是共同成员的组。
例如:
用户 A 是组 [W, X, Y] 的成员
用户 B 是组 [W, X, Z] 的成员
使用此查询,预期答案将是组 [W, X]
(Groups_From_A ∩ Groups_From_B)
我已经找到了一些答案,但他们不仅仅使用事件记录:
user_a.groups & user_b.groups
我不想在内存中这样做,而是在数据库中。
最佳答案
我做到了!!\o/
在@zerkms 先生的帮助下,答案已发布 here .
好吧,我知道这很棘手,但结果比我想象的要容易。
最终查询:
Group.joins(:users).where(users: { id: [user_a.id, user_b.id] }).group("groups.id").having("COUNT(users.id)=2")
说明:
我从用户 A 和 B 查询组:
Group.joins(:users).where(users: { id: [user_a.id, user_b.id] }).(...)
它给了我一个数组,其中包含来自两个用户的所有组,甚至是重复的。
所以我将它们分组并得到 2 的计数。因为当我们重复一个组时,这意味着该组是从用户 A 和用户 B 查询的。
(...).group("groups.id").having("COUNT(users.id)=2")
它运行良好,但如果您有更好或不同的解决方案,我将很高兴看到。
谢谢大家,也谢谢 @zerkms 先生,我只是将您的回答“翻译”到了 RoR。
关于mysql - 查询两个用户之间的公共(public)组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977075/