У меня есть 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
Моя проблема : Я пытаюсь получить список групп с указанием c идентификатор пользователя является членом (например, здесь 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
ограничен указанным идентификатором.
Я видел много ответов SO, предлагающих использовать HAVING
против WHERE
, но это приводит к ошибке. Я пробовал JOIN
s, это тоже не работает.
Как я могу отфильтровать таблицу groups_users
только для таблиц с user_id
из 2, а затем получить список всех членов этих group_id
s