SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.09.2012 16:23:34

denisOg
Участник
Зарегистрирован: 20.11.2009
Сообщений: 15

Как оптимизировать сложный запрос с подзапросами?

Нужно выбрать из таблицы events (мероприятия), те мероприятия которые может видить пользователь.
Есть 4 типа мероприятий (type_events):
1 - частные (только если тебя пригласили) user_pride
2 - дружественные( если создатель-твой друг) friends
3 - публичные (все видны)
4 - прайдовые (грпповые. прайды-смысл группа. если ты состоишь в прайде, то ты видишь эти мероприятия.) user_pride

Плюс нужно подсчитать количесвто заявок, количесвто участников, количесвто комментариев и прилепить название страны(country), название города(city), логин пользователя(user), название прайда(pride, если событие прайдовое )

Использую вложенные запросы.

Вот общая схема запроса:


SELECT
 мероприятия.* ,
 (SELECT количесвто комментариев) AS количесвто_комментариев,
 (SELECT количесвто участников) AS количесвто_участников,
 (SELECT количесвто запросов) AS количесвто_запросов,
 (SELECT название города) AS название города,
 (SELECT название_страны) AS название_страны,
 (SELECT название прайда) AS название прайда

FROM
 мероприятия, участники мероприятия, друзья
WHERE
 мероприятия.создатель мероприяти = мой_ид
OR
 тип события =1 AND участники.ид_мероприятия=мероприятия.ид_мероприятию AND участники.ид_пользователя = мой_ид
OR
 тип события =2 AND друзья.ид_друга1=мероприятия.ид_создателя AND друзья.ид_друга2 = мой_ид
OR
 тип события =4 AND мероприятие.ид_ид_прайда IN (SELECT ид_прайда в которых я состоя)

OR
 тип события = 3

GROUP BY мероприятие.ид_мероприятия
ORDER BY мероприятие.дата_проведения ASC
 


Получается если тип события =4 я делаю каждый раз запрос на выборку. Может из следует один раз выбрать?
Может быть сделать несколько вопросов? В первых свормироватьмассив ID мероприятий, которые нужны, а потом через WHERE IN выбрать нужные?
Как можно оптим
изировать, что бы быстрее выполнялся?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson