MYSQL - вопрос GROUP BY и ORDER BY - PullRequest
0 голосов
/ 20 июля 2011

У меня есть этот запрос:

SELECT id, rdate, member_id
FROM msgs
WHERE wrote_to='1000'
AND tb1.member_id != '1002'
AND deleted != '1000'
GROUP BY member_id
ORDER BY rdate DESC

Проблема в том, что я получаю сообщения, но не новое, по rdate ...

Как я могу заказать их по rdate и group по member_id? ... чтобы я получал самое новое сообщение от каждого пользователя?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 20 июля 2011

Попробуйте:

SELECT * FROM (
      SELECT id, rdate, member_id FROM msgs 
       WHERE wrote_to = '1000' 
         AND tb1.member_id != '1002' 
         AND deleted != '1000' 
    ORDER BY rdate DESC
) tmp_msgs
GROUP BY member_id

Это будет иметь чуть меньшую производительность из-за временной таблицы, но это компромисс, который вы должны сделать для рабочего решения.

Как @Брендан Буллен заметил, почему вы используете псевдоним tb1. там?

0 голосов
/ 20 июля 2011

Предполагая последовательный идентификатор:

SELECT id, rdate, member_id
FROM msgs
WHERE wrote_to='1000'
AND tb1.member_id != '1002'
AND deleted != '1000'
GROUP BY member_id
HAVING id = MAX(id)
ORDER BY rdate DESC

Использование GROUP BY для вложенного выбора не является надежным (даже для упорядоченных результатов), поскольку поведение для столбцов, не указанных в группировке, не определено.

0 голосов
/ 20 июля 2011

rdate может приходить из другой таблицы или вы ввели неверное имя столбца.

...