MySQL запрос.Не могу получить это - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть две таблицы в базе данных.Один хранит уникальные имена пользователей и уникальный идентификатор, а другой хранит «друзей» пользователей из предыдущей таблицы: например:

table users:
id   | username
---------------
100  |   aaa
200  |   bbb
300  |   ccc

table friends:
id | user  | friend
-------------------
1  | 100   | 200
2  | 300   | 100
3  | 300   | 200 

Как и в приведенном выше примере, пользователь 100 дружит с 300, а также с 200.Я хочу отобразить список, содержащий всех 100 друзей пользователей.Имейте в виду, что он может появиться в таблице «друзей» в обеих колонках (пользователь и друг).Не могу понять, как должен выглядеть запрос.Все, что я пытаюсь, это дублирует строки и еще много чего.

Я знаю, что это тривиально, но я новичок в этом.

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Это будет работать без дубликатов

SELECT distinct id FROM(
SELECT friend as id FROM friends
WHERE user = 100
UNION ALL
SELECT user as id FROM friends
WHERE friend = 100) ;
1 голос
/ 05 февраля 2012

попробуйте ниже:

Select distinct u.id, u.username
from Users as u 
left join Friends as f on (u.id = f.user or u.id = f.friend)
where u.id=100
1 голос
/ 05 февраля 2012

Попробуйте:

Select distinct u.id, u.username
  from Users u 
  inner join Friends f on u.id = f.id
  where f.friend = 100
UNION ALL
Select distinct u.id, u.username
  from Users u 
  inner join Friends f on u.id = f.id
  where f.user = 100 

Или:

Select distinct u.id, u.username
  from Users u 
  inner join Friends f on u.id = f.id
  where f.user = 100 or f.friend = 100 
...