@BarabanObivan

Как можно оптимизировать этот sql запрос?

Как можно оптимизировать этот запрос?

Задача - вывести комнаты, в которых пользователь с id = 1 участвует и вывести последнее сообщение либо файл.

SELECT r.id
      ,r.type
      ,r.name
      ,rm.text
      ,rmf.file
FROM rooms r
LEFT JOIN room_participants rp
    on r.id = rp.room_id
INNER JOIN
(
      SELECT room_id, MAX(id) AS max_id
      FROM room_messages
      GROUP BY room_id
) rm_max
    ON r.id = rm_max.room_id
INNER JOIN room_messages rm
    ON r.id = rm.room_id AND rm_max.max_id = rm.id
LEFT JOIN room_message_files rmf
    ON rm.id = rmf.room_message_id
where rp."participantType" = 'USER' and rp.participant_id = 1
ORDER BY rm.room_id;
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kalsc12345
Неизвестный человек.
SELECT r.id
      ,r.type
      ,r.name
      ,rm.text
      ,rmf.file
FROM rooms r
INNER JOIN (
      SELECT room_id, MAX(id) AS max_id
      FROM room_messages
      GROUP BY room_id
) rm_max ON r.id = rm_max.room_id
INNER JOIN room_messages rm
      ON r.id = rm.room_id AND rm_max.max_id = rm.id
LEFT JOIN room_message_files rmf
      ON rm.id = rmf.room_message_id
WHERE EXISTS (
      SELECT 1
      FROM room_participants rp
      WHERE rp."participantType" = 'USER' 
            AND rp.participant_id = 1
            AND rp.room_id = r.id
)
ORDER BY rm.room_id;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы