Друзья друзей, как вывести? - MySQL
Формулировка задачи:
Ковырнул такое, но не пойму, почему оно выводит неправильно
http://sqlfiddle.com/#!9/cb09e5/2
Допустим нужно вывести друзей юзера 2, у которого друзья 3 и 4, но за исключением самого юзера + его друзей, так как нужно не друзей, а друзей друзей вывести онли.
В итоге результат почти правильный. но выводит юзера под номером 4, который является другом и не должен был выводиться, что проверяется FIND_IN_SET, но блин, почему в значении aaa разные значения? Ведь тот подзапрос который присваивает ааа значения в скобках и по идее должен выполняться раньше, но почему-то это не так. Короче, поясните.
Решение задачи: «Друзья друзей, как вывести?»
textual
Листинг программы
SET @f_ids:='2'; select friend_id, @f_ids:=CONCAT_WS( ',', friend_id, @f_ids ) AS aaa from friends WHERE friends.user_id=2; SELECT * FROM users INNER JOIN ( SELECT mutual_friends.user_id, mutual_friends.friend_id, @f_ids as aaa FROM friends AS mutual_friends ) AS result_friends ON users.id=result_friends.friend_id where FIND_IN_SET( result_friends.friend_id, aaa )=0
Объяснение кода листинга программы
В этом коде:
- Создается переменная @f_ids и присваивается ей значение '2'.
- Выполняется запрос к таблице
friends
, где друзьям пользователя с id=2 добавляется в переменную @f_ids значение friend_id. - Выполняется запрос к таблице
users
, где происходит внутреннее соединение с таблицейfriends
по friend_id и id пользователя, и где в результате не будет учтен сам пользователь с id=2. - Результатом будет список пользователей, которые являются друзьями друзей пользователя с id=2, исключая самого пользователя с id=2.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д