Как оптимизировать запросы?
Как оптимизировать запросы? Привет, есть чат, который состоит из следующих таблиц
Комнаты чата rooms
id, type(USER_TO_USER, USER_TO_SHOP, USER_TO_PLATFORM), name
Участники комнаты чата room_participants
id, participantType (USER, SHOP, PLATFORM), participant_id
Список сообщений
room_messages - id, participant_id, text, is_read
Дополнительно:
Таблица пользователей users
id, first_name, last_name, image, image_src
Таблица магазинов shops
id, name, logo, logo_src
Стоит задача:
- Вывести список комнаты с ее участниками для конкретного пользователя + последнее сообщение комнаты (как ВК)
первое что я сделал это запрос на получение всех комнат: в которых состоит конкретный пользователь
select r.id, r.name from rooms as r
left join room_participants rp on r.id = rp.room_id
where rp."participantType" = 'USER' and rp.participant_id = 1
второй запрос я делаю на получение участников (кроме текущего пользователя) для каждой комнаты,
select
room_id,
case
when "participantType" = 'USER' and participant_id != 1 then (SELECT id FROM users WHERE id = participant_id)
when "participantType" = 'SHOP' then (SELECT id FROM shops WHERE id = participant_id)
END AS participant_id,
case
when "participantType" = 'USER' and participant_id != 1 then (SELECT first_name FROM users WHERE id = participant_id)
when "participantType" = 'SHOP' then (SELECT name FROM shops WHERE id = participant_id)
END AS participant_name,
case
when "participantType" = 'USER' and participant_id != 1 then (SELECT image FROM users WHERE id = participant_id)
when "participantType" = 'SHOP' then (SELECT logo FROM shops WHERE id = participant_id)
END AS participant_image,
case
when "participantType" = 'USER' and participant_id != 1 then (SELECT image_src FROM users WHERE id = participant_id)
when "participantType" = 'SHOP' then (SELECT logo_src FROM shops WHERE id = participant_id)
END AS participant_image_src
from room_participants
where room_id in (1)
Вопрос вот в чем, как можно эти запросы оптимизировать?
и второй вопрос, если это оптимальные запросы, то как при последнем запросе, как убрать пустые строки