Выбор последних сообщений для конкретного юзера - 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`

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы