Нужно выбрать из таблицы 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 выбрать нужные?
Как можно оптим
изировать, что бы быстрее выполнялся?