«друзья друзей», например sql query

Я создаю приложение, в котором пользователи могут связываться друг с другом (что-то вроде друзей в любой социальной сети).

Я сохраняю эти соединения в таблице со следующей структурой:

id_user1 | id_user2 | is_accepted | is_blocked | created_at

Соединения между пользователями являются двунаправленными, поэтому при соединении двух пользователей в таблице остается только одна запись. Не имеет значения, находится ли user_id в столбце id_user1 или id_user2 .

Теперь мне нужно написать sql-запрос, чтобы получить "друзей друзей" из определенного пользователя, который еще не является его другом. Также пользователь должен быть принят, а не заблокирован.

В резюме, вот шаги, которые мне нужно выполнить.

  1. Найти все идентификаторы пользователей, связанные с пользователем, которого я хочу ( id_user1 = current_user или id_user2 = current_user и is_accepted and ! Blocked )

  2. для каждого из возвращенных user_id -> получить всех связанных пользователей (игнорировать ассоциации с текущим пользователем) (убедитесь, что он принят и ! заблокирован ).

Как я могу выполнить такой запрос?.

Спасибо за вашу помощь.

6
задан hsz 26 April 2011 в 16:17
поделиться