从属于组 mysql 的用户 ID 中查找聊天组的组 ID



我正在开发一个聊天应用程序。

如果组只包含两个具有给定 sql 查询的人,我可以找到组 ID。

我的数据库结构是(用户 ID 和组 ID 是外键(:

Group: 
id | name | createdAt 
1    foo 
2    boo
GroupUser:
userId | groupId | createdAt
1        1
2        1
3        1
select guf.groupId 
from GroupUser guf 
INNER join GroupUser gu 
on guf.groupId = gu.groupId 
where guf.userId = 1 
and gu.userId != guf.userId 
and EXISTS (
select gu.groupId 
from GroupUser 
where gu.userId = 2
)

目前我找不到至少包含 3 人或更多人的对话组 ID。更具体地说,例如组包含 4 人。根据他们的 ID,我想找到组 ID。就像其中给定 4 个特定人员的组 ID 是什么?它必须返回示例 1(即 groupId(。

如果需要包含三个人的组:

select gu.group_id
from groupusers gu
where gu.user_id in (1, 2, 3)
group by gu.group_id
having count(*) = 3;

如果你只想要三个人,你可以将条件移动到having子句:

select gu.group_id
from groupusers gu
group by gu.group_id
having sum(gu.user_id in (1, 2, 3)) = 3;

如前所述,这些查询假定groupusers没有重复的行。 这似乎是一个合理的假设。 如果允许重复,则可以调整逻辑以使用count(distinct)

最新更新