我有2个表:groups
:组名称的简单列表,group_users
:组及其用户的列表,例如:
group_id user_id
1 2
1 37
1 38
3 14
8 2
8 24
8 27
我有一个正在运行的GROUP_CONCAT
查询:
SELECT g.group_id, g.groupname
,GROUP_CONCAT(DISTINCT CONVERT(gu.user_id, CHAR(2)) ORDER BY gu.user_id) AS group_members
FROM group_users gu, groups g
WHERE g.group_id = gu.group_id
GROUP BY gu.group_id ORDER BY gu.group_id;
这将产生结果:
group_id groupname group_members
1 Sales 2,37,38
3 Marketing 3
8 Production 2,24,27
我的问题:我正在尝试获取特定用户ID所属的群组的列表(例如,在这里,user_id 2应该生成结果行1和3)。
但是,当我更改标准WHERE g.group_id = gu.group_id AND gu.user_id = 2
时,我得到:
group_id groupname group_members
1 Sales 2
8 Production 2
组被正确过滤,但是group_members
列表限于所述ID。
[我已经看到许多SO答案建议使用HAVING
与WHERE
,但这会产生错误。我已经尝试过JOIN
,但这也不起作用。
如何将groups_users
表仅过滤到user_id
为2的表,然后获取那些group_id
的所有成员列表?
您可以添加查询以过滤所需的组:
SELECT g.group_id, g.groupname
,GROUP_CONCAT(DISTINCT CONVERT(gu.user_id, CHAR(2)) ORDER BY gu.user_id) AS group_members
FROM (SELECT group_id FROM group_users WHERE user_id=2) gu1
INNER JOIN group_users gu
ON gu.group_id=gu1.group_id
INNER JOIN groups g
ON g.group_id = gu.group_id
GROUP BY gu.group_id
ORDER BY gu.group_id;