Выбор последних сообщений для конкретного юзера - MySQL
Формулировка задачи:
Есть табла chatmessage, у ней есть айдишник, который чем выше, тем ластовей. Есть sender_id(отправитель) и receiver_id(получатель). Нужно найти последние сообщения юзера 1 со всеми другими юзерами системы.
написал такой бредище. Есть ли более адекватный вариант?
SELECT DISTINCT MAX( max_id ) AS max_id FROM ( SELECT MAX(id) AS max_id, sender_id AS conv_user_id FROM ( SELECT * FROM `chatmessage` WHERE sender_id=1 OR receiver_id=1 ) AS t1 GROUP BY sender_id UNION SELECT MAX(id) AS max_id, receiver_id AS conv_user_id FROM ( SELECT * FROM `chatmessage` WHERE sender_id=1 OR receiver_id=1 ) AS t2 GROUP BY receiver_id ) AS r group BY conv_user_id
Слегка вроде как прооптимизил запрос, но все равно не нравится.
SELECT MAX( _max_id ) AS max_id FROM ( SELECT MAX(id) AS _max_id, `sender_id` AS `conv_user_id` FROM `chatmessage` WHERE `receiver_id`='$main_user_id' GROUP BY `sender_id` UNION SELECT MAX(id) AS _max_id, `receiver_id` AS `conv_user_id` FROM `chatmessage` WHERE `sender_id`='$main_user_id' GROUP BY `receiver_id` ) AS r GROUP BY `conv_user_id`
Решение задачи: «Выбор последних сообщений для конкретного юзера»
textual
Листинг программы
SELECT MAX(`id`) AS `max_id` FROM ( SELECT `id`, `sender_id` FROM `chatmessage` WHERE `receiver_id`='$main_user_id' UNION SELECT `id`, `receiver_id` FROM `chatmessage` WHERE `sender_id`='$main_user_id' ) AS r GROUP BY `sender_id`
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д