Друзья друзей, как вывести? - 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

Объяснение кода листинга программы

В этом коде:

  1. Создается переменная @f_ids и присваивается ей значение '2'.
  2. Выполняется запрос к таблице friends, где друзьям пользователя с id=2 добавляется в переменную @f_ids значение friend_id.
  3. Выполняется запрос к таблице users, где происходит внутреннее соединение с таблицей friends по friend_id и id пользователя, и где в результате не будет учтен сам пользователь с id=2.
  4. Результатом будет список пользователей, которые являются друзьями друзей пользователя с id=2, исключая самого пользователя с id=2.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы