Как сформулировать запрос к базе данных таким образом, чтобы получить нужную информацию?

Как составить запрос к базе данных, чтобы выбрать последнее сообщение, связанное с определенным пользователем (не важно, отправитель ли он или получатель), и каждым уникальным собеседником? 

Например, у пользователя с идентификатором 4 (Дима) есть сообщения с другими пользователями. Необходимо выбрать последнее сообщение пользователя 4 с каждым другим пользователем, где он является отправителем или получателем.
  • 4 октября 2023 г. 20:07
Ответы на вопрос 2
Для выборки последнего сообщения пользователя 4 с каждым другим пользователем, где он является отправителем или получателем, можно использовать следующий запрос к базе данных:

SELECT recipient_id, sender_id, message
FROM messages
WHERE (sender_id = 4 OR recipient_id = 4)
AND (sender_id, recipient_id, created_at) IN (
    SELECT sender_id, recipient_id, MAX(created_at)
    FROM messages
    WHERE sender_id = 4 OR recipient_id = 4
    GROUP BY sender_id, recipient_id
) 

Где:
- messages - название таблицы с сообщениями;
- recipient_id - идентификатор получателя сообщения;
- sender_id - идентификатор отправителя сообщения;
- message - содержание сообщения;
- created_at - дата и время создания сообщения.

Этот запрос выберет последнее сообщение, связанное с пользователем 4 (Дима), для каждого уникального собеседника, где он является отправителем или получателем.
Выберите все сообщения, в которых пользователь с идентификатором 4 является отправителем или получателем. Группируйте их по идентификатору собеседника. Для каждого собеседника выберите дату и время последнего сообщения и само последнее сообщение, если оно было отправлено или получено от пользователя с идентификатором 4. Разделите каждый результат с помощью символа "
Похожие вопросы