«Дружеские» отношения между двумя таблицами mysql - PullRequest
1 голос
/ 02 марта 2011

Я не совсем уверен, как создать порядок объединения SQL, чтобы определить, кто из "друзей" конкретного пользователя.

Например, у меня есть две таблицы

User Table
u_ID  | u_Name
-------------
1     |  bob
2     |  jill
3     |  jack
4     |  susan

Friends Table
f_ID | u_ID1 | u_ID2
--------------------
1    |   1   |   2
2    |   3   |   1
3    |   4   |   2

Мне нужнонапример, чтобы найти способ получить всех друзей Бобса или всех друзей Джиллс.

Друзья не могут иметь повторяющиеся результаты

Т.е. может быть строка с любым из них (u_ID1 = 1, u_ID2= 2) или (u_ID1 = 2, u_ID = 1), но не оба, поскольку они технически одинаковы.

Вот мой неверный запрос

SELECT u.u_Name
FROM user u
INNER JOIN friends f ON (f.u_ID1 = '1' OR f.u_ID2 = '1')

Заранее спасибо


Решение

Проверьте ответ Криса Бабича за решение,

также спасибо за помощь всем остальным

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Используется STRAIGHT соединение, но должно работать:

select u.u_Name
from friends f, user u
where (f.u_ID1 = '1' and u.u_ID = f.u_ID2) 
  or (f.u_ID2 = '1' and u.u_ID = f.u_ID1)
1 голос
/ 02 марта 2011

Для всех друзей Боба это должно работать (не проверено)

select u.u_Name
FROM user u
inner join friends f1 on f1.u_uID1 = u.u_ID
inner join friends f2 on f2.u_uID2 = u.u_ID
where u.u_ID = 1
0 голосов
/ 02 марта 2011

Попробуйте это:

SELECT u1.u_Name as user1 , u2.u_Name as user2
FROM user as u1 INNER JOIN friends ON u1.u_ID=friends.u_ID1 
INNER JOIN user as u2 ON u2.u_ID=friends.u_ID2
...