Повторяющиеся результаты с соединением SQL - PullRequest
0 голосов
/ 22 июля 2011
SELECT `groups`.`name`, `groups`.`id`
FROM `groups`
JOIN `group_members`
    ON (`group_members`.`user_id` = `groups`.`user_id`)
WHERE `groups`.`user_id` = '33'
ORDER BY `groups`.`id`

Мне нужно получить идентификатор группы и имя группы для каждой группы, членом которой он является. Но результаты не могут дублироваться!

Мой запрос возвращает много повторяющихся записей.

В groups сохраняются все группы, которые существуют (name, description и т. Д.). В group_members хранятся все пользователи, которые являются членами какой-либо группы (user_id, group_id и т. Д.).

Как изменить этот запрос, чтобы получить не дублирующиеся, а правильные результаты? Спасибо за совет!

Edit:

В groups нет user_id. Все участники группы хранятся в таблице group_members. Мне нужно получить все группы (идентификатор и имя группы), в которых пользователь является участником.

Ответы [ 4 ]

5 голосов
/ 22 июля 2011

Если вы хотите знать все группы одного пользователя, вам нужно присоединиться к group_members.group_id и отредактировать предложение WHERE.

SELECT `groups`.`name`, `groups`.`id`
FROM `groups`
JOIN `group_members`
    ON (`group_members`.`group_id` = `groups`.`id`)
WHERE `group_members`.`user_id` = '33'
ORDER BY `groups`.`id`
1 голос
/ 22 июля 2011

Во-первых, ваш запрос гласит:

`groups`.`user_id` = '33'

Это кажется неправильным, потому что зачем в таблице групп находиться пользователь?

По поводу вопроса. Вы, вероятно, получаете дубликаты, потому что пользователь может существовать более чем в одной группе. Другими словами, если вам нужна только одна группа для каждого пользователя, это зависит от того, какую группу вы хотели бы видеть. Это может быть минимальный идентификатор группы, максимум или почти все, что вы хотите.

0 голосов
/ 22 июля 2011
SELECT g.name, g.id
FROM groups g
where EXISTS (
  select 'x'
  from group_members gm
  where g.id = gm.group_id
    and gm.user_id = '33'
)
ORDER BY g.id
0 голосов
/ 22 июля 2011

Полагаю, вы перепутали некоторые поля, вот и все:

SELECT `groups`.`name`, `groups`.`id` 
FROM `groups` 
JOIN `group_members`     
ON `group_members`.`group_id` = `groups`.`id` 
WHERE `groups_members`.`user_id` = '33' 
ORDER BY `groups`.`id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...