Выборка всех последних сообщений из всех диалогов - MySQL
Формулировка задачи:
У меня есть таблица Message:
Как мне выбрать все последние сообщения из диалогов. То есть из всех диалогов только 1 последнее сообщение - с наибольшей датой.
Например для юзера с id = 4, есть 3 диалога с юзерамы с id=5,3,1.
В диалоге между юзерами 5-4 будут сообщения (105),
между юзерами 1-4 будут сообщения (103,102,101,100) ...
Так вот, среди всех диалогов мне нужно выбрать все самые последние сообщения.
В данном примере, это будут сообщения: 103,104,105.
Еще есть дополнение,
если выйдет запрос для нахождения описанного выше
, то как еще сделать исключение для найденного списка. Например, есть массив-список с id пользователей сообщения от которых не должны показываться. Пусть там есть reject_id(12,5,21). Значит сообщение 105 не должно находится в запросе, т.к. его прислал пользователь с id=5.Решение задачи: «Выборка всех последних сообщений из всех диалогов»
textual
Листинг программы
SELECT * FROM `Message` WHERE id IN ( SELECT max(id) as id FROM (SELECT id, fromUserId, toUserId FROM `Message` WHERE fromUserId =4 UNION ALL SELECT id, toUserId, fromUserId FROM `Message` WHERE toUserId =4) t GROUP BY fromUserId, toUserId ) ORDER BY id DESC
Объяснение кода листинга программы
В данном коде выполняется выборка всех последних сообщений из всех диалогов.
- Сначала мы выбираем максимальное значение id из таблицы
Message
, где fromUserId = 4 или toUserId = 4 (это диалоги, в которых участвует пользователь с id = 4). - Затем мы группируем результаты по fromUserId и toUserId, чтобы получить уникальные диалоги.
- После этого мы выбираем все строки из таблицы
Message
, где id входит в список max(id), который мы получили на предыдущем шаге. Это гарантирует, что мы получим только последние сообщения из каждого диалога. - Наконец, мы сортируем результаты по id в порядке убывания, чтобы получить последние сообщения в начале списка. Таким образом, данный запрос выбирает все последние сообщения из всех диалогов, в которых участвует пользователь с id = 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д