Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Таблица users - пользователи, groups - группы пользователей, записи в groups имеет поля: group_id, user_id, rec_status (если rec_status = 1, значит запись активная и ее надо учитывать в запросе). Приведен пример запроса для пользователя с user_id = 146, он ищет себе друга для создания новой группы, в запросе должны отображаться пользователи, которые не состоят в группах с пользователями, с которыми пользователь уже организовывал группы. То есть друзья друзей не должны отображаться. Можно ли как-то оптимизировать запрос, используя например, "EXISTS" ? Кстати, надо ли убрать DISTINCT везде? При выполнении запроса появлются "тормоза", добавил индексы, вроде меньше стало тормозить, но может можно еще что-то сделать. Спасибо заранее.
SELECT * FROM users WHERE user_id NOT IN
(SELECT DISTINCT user_id FROM groups WHERE group_id IN
(SELECT DISTINCT group_id FROM groups WHERE user_id IN
(SELECT DISTINCT user_id FROM groups WHERE group_id IN
(SELECT DISTINCT group_id FROM groups WHERE user_id = '146' AND rec_status = 1 )
AND rec_status = 1)
AND rec_status = 1)
AND rec_status = 1);
Неактивен
В mysql NOT IN зачастую плохо работает, перепишете запрос через JOIN'ы как минимум. Ключик на (user_id, rec_status) в таблице groups создайте, если нету еще.
Неактивен
Первое, что хочется заметить — это то, что нет в запросе таблицы, которая определяет друзей и отбрасывает друзей друзей. Если такую таблицу ввести, что все становится проще. Предположим, что это таблица friends (user_id,friend_id).
Неактивен