Как получить как моих друзей, так и друзей друзей? - PullRequest
3 голосов
/ 14 октября 2011

Я хочу, чтобы у меня были друзья, а также друзья друзей, но не более друзей 2-й степени

Моя структура таблицы будет выглядеть примерно так

user_id  friend_user_id
1            2
1            4
2            3
2            4
2            5
3            7

Что мне нужно, так это если мой идентификатор пользователя равен «1», тогда я хочу, чтобы у всех моих ближайших друзей (в данном случае 2 и 4), а у user_is 2 было несколько друзей (3,4,5), и ожидаемый результат равен 2,3 , 4,5

Как я могу получить это?

Ответы [ 3 ]

3 голосов
/ 14 октября 2011
SELECT friend_user_id 
FROM table
WHERE user_id = 1 OR user_id IN (SELECT friend_user_id FROM table WHERE user_id = 1) 
3 голосов
/ 14 октября 2011

Используйте объединение и внутреннее объединение:

select friend_user_id from friends
where user_id = ?
union
select f2.friend_user_id from friends f1
join friends f2 on f2.user_id = f1.friend_user_id
where f1.user_id = ?

Это должно работать очень хорошо (намного лучше, чем использовать дополнительный выбор в любом случае).

2 голосов
/ 14 октября 2011
SELECT friend_user_id FROM friends WHERE user_id = 1
UNION
SELECT friend_user_id FROM friends WHERE user_id IN (SELECT friend_user_id FROM friends WHERE user_id = 1)

Это даст вам набор со всеми друзьями и друзьями друзей пользователя с идентификатором 1, с удалением дубликатов.Вы можете легко расширить это для 3-го, 4-го и т. Д., Вложив запросы с помощью предложения IN.

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