Выборка пользователей со сложным условием - MySQL
Формулировка задачи:
Задача:
Нужно составить запрос так чтобы выводил всех пользователей сайта кроме тех, что есть в друзьях авторизованного пользователя и эво самого. Есть две таблицы:- Первая user - список пользователей сайта
- Вторая friends - связь двух пользователей которые являются друзьями
- id_сер - id пользователя
- name - имя пользователя
- id_s - id пользователя который отправил запрос на дружбу
- id_f - id пользователя принявший запрос на дружбу
SELECT name,id_s,id_f,id_user FROM USER LEFT JOIN friends ON USER.id_user = friends.id_s WHERE id_s IS NULL AND id_user NOT IN (SELECT id_f FROM friends WHERE id_s = $user_id) AND id_user NOT IN (SELECT id_s FROM friends WHERE id_f = $user_id) UNION SELECT name,id_s,id_f,id_user FROM USER LEFT JOIN friends ON USER.id_user = friends.id_s WHERE id_s != $user_id AND id_f != $user_id
Решение задачи: «Выборка пользователей со сложным условием»
textual
Листинг программы
SELECT name,id_user FROM USER WHERE id_user NOT IN( SELECT id_s FROM friends WHERE id_f=$user_id UNION ALL SELECT id_f FROM friends WHERE id_s=$user_id UNION ALL SELECT $user_id)
Объяснение кода листинга программы
В представленном коде выполняется выборка из таблицы USER
полей name
и id_user
с условием, что id_user
не входит в список id_s
из таблицы friends
, где id_f
равен переменной $user_id
. Также в список исключений добавляются сами значения id_f
из таблицы friends
.
- SELECT name,id_user FROM USER - выборка полей
name
иid_user
из таблицыUSER
- WHERE id_user NOT IN( - условие, что
id_user
не входит в списокid_s
- SELECT id_s FROM friends - выборка поля
id_s
из таблицыfriends
- WHERE id_f=$user_id - условие, что
id_f
равно переменной$user_id
- UNION ALL - объединение результатов предыдущих запросов
- SELECT $user_id - выборка значения переменной
$user_id
Список исключений формируется в целях предотвращения выборки пользователей, которые являются друзьями пользователя с указанным id.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д