godunreal
Новичок
Есть 3 таблицы
1ая - history:
id, user, group, type, object, time, status
В ней хранится "история", где user - id пользователя, у которого произошло событие
group - id группы, у которой произошло событие (к примеру, публикация записи)
Причем, либо user, либо group равняется "0", т.к. событие не можем происходить одновременно у группы и пользователя.
2ая таблица friends:
id, with, status, time
здесь id и with - id пользователей, которые "дружат" друг с другом при status = 1
3ая таблица members_group (участники групп):
user, group, time, level
здесь user - id пользователя, group - id группы, в которой user состоит.
Есть следующий запрос.
Данные он выводит верно. Все замечательно. Кроме одного.
Запрос выполняется очень долго... php зависает на несколько минут после выполнения запроса.
Можете помочь оптимизировать запрос и подсказать, что делать?
Пробовал перестроить запрос с INNER JOIN для оптимизации с ключами - не получилось составить сам запрос...
Буду безумно благодарен за помощь!
1ая - history:
id, user, group, type, object, time, status
В ней хранится "история", где user - id пользователя, у которого произошло событие
group - id группы, у которой произошло событие (к примеру, публикация записи)
Причем, либо user, либо group равняется "0", т.к. событие не можем происходить одновременно у группы и пользователя.
2ая таблица friends:
id, with, status, time
здесь id и with - id пользователей, которые "дружат" друг с другом при status = 1
3ая таблица members_group (участники групп):
user, group, time, level
здесь user - id пользователя, group - id группы, в которой user состоит.
Есть следующий запрос.
Код:
SELECT history.type,history.object,history.group AS hgroup,history.time,history.id,history.status,history.user AS huser ,friends.id,friends.with,members_group.user,members_group.group FROM history,friends,members_group WHERE
(((friends.id=history.user OR friends.with=history.user) AND ((friends.id=$check_session[id] OR friends.with=$check_session[id] AND friends.active=1) OR (friends.id=$check_session[id])))
OR
(history.group=members_group.group AND members_group.user=$check_session[id] AND history.type='group_wall'))
AND history.status=1
GROUP BY history.id ORDER BY history.time DESC
LIMIT $begin_user,10
Запрос выполняется очень долго... php зависает на несколько минут после выполнения запроса.
Можете помочь оптимизировать запрос и подсказать, что делать?
Пробовал перестроить запрос с INNER JOIN для оптимизации с ключами - не получилось составить сам запрос...
Буду безумно благодарен за помощь!