|
31.2 Кб |
|
| Задача: Нужно составить запрос так чтобы выводил всех пользователей сайта кроме тех, что есть в друзьях авторизованного пользователя и эво самого.
Есть две таблицы:
Первая user - список пользователей сайта
Вторая friends - связь двух пользователей которые являются друзьями
Таблица user имеет колонки:
id_сер - id пользователя
name - имя пользователя
Таблица friends имеет колонки:
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
|
$user_id - id авторизованного пользователя
Проблемы которые возникли:
1. Одни и те же пользователи выводятся несколько раз
2. Если пользователь не имеет еще друзей то в списке выводится и он (Знаю как решить).
Вопрос:
1. Можно составить запрос более производительним? Если да, то как?
2. Если логика запроса правильная то как решить Вышеперечисленные проблемы?
Приоритеты:
1.Время выполнения запроса
2.Количество занимаемого места | |
|
|
|
|
|
|
|
для: kartak
(03.06.2016 в 13:01)
| |
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)
|
| |
|
|
|