MySQL добавил оператор GROUP BY - PullRequest
       32

MySQL добавил оператор GROUP BY

0 голосов
/ 17 сентября 2011

У меня есть таблица сообщений в MySQL. Столбцы именуются как отправитель, получатель, текст, идентификатор, дата.

Запрос такой:

SELECT max(id), text 
FROM `messages` 
WHERE reciever = $user_id OR sender = $user_id 
GROUP BY reciever, sender 
ORDER BY date DESC

Группирует сообщения по отправителю (или получателю) и возвращает идентификатор последнего сообщения max (id), но не возвращает текст последнего сообщения.

Есть ли способ решить эту проблему без JOIN и UNION?

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 17 сентября 2011

Вы можете сделать это следующим образом:

SELECT * FROM messages 
WHERE id IN 
    (
         SELECT MAX(id) FROM messages
         WHERE reciever = $user_id OR sender = $user_id
         GROUP BY reciever, sender
    ) 
ORDER BY date DESC
1 голос
/ 17 сентября 2011

Групповая операция может использоваться ТОЛЬКО в компаньоне с операциями агрегирования, такими как сумма, среднее и подсчет. Использование других атрибутов просто не имеет смысла.

Представьте, что у вас есть два кортежа стот же получатель, что вы ожидаете от сгруппированного текста?Это просто не имеет смысла.

Судя по моим предположениям относительно вашей цели, ответ от @danishgoel может быть тем, что вы хотите, если я угадала Райта.

0 голосов
/ 17 сентября 2011

Чтобы выбрать последнее сообщение $ user_id:

SELECT id, text FROM `messages`
WHERE `reciever` = $user_id OR `sender` = $user_id 
ORDER BY `id` DESC
LIMIT 1
...