Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка пользователей со сложным условием
 
 автор: kartak   (03.06.2016 в 13:01)   письмо автору
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   (04.06.2016 в 19:05)   письмо автору
 
   для: 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) 

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования