Выбор последних сообщений для конкретного юзера - 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
Добавлено через 1 час 30 минут Слегка вроде как прооптимизил запрос, но все равно не нравится.
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`

Код к задаче: «Выбор последних сообщений для конкретного юзера - MySQL»

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`

8   голосов, оценка 4.125 из 5


СОХРАНИТЬ ССЫЛКУ