#mysql #database #group-by #sql-order-by
#mysql #База данных #группировать по #sql-порядок по
Вопрос:
Я пытаюсь найти правильный способ получения правильных результатов из моей таблицы mysql. У меня есть таблица, используемая для хранения сообщений:
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`who` int(11) NOT NULL,
`to` int(11) NOT NULL,
`message` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
)
В этой таблице хранятся все сообщения из всех разговоров между всеми участниками.
Чтобы упорядочить результаты, я использую этот запрос:
SELECT * FROM messages group by who order by date desc
Он группирует сообщения должным образом в соответствии с их отправителями, но упорядочивает их в соответствии с датой первого сообщения, написанного определенным участником. Я хочу упорядочить вывод в соответствии с датой последнего сообщения.
Пожалуйста, помогите мне найти выход из этого, у меня такое чувство, что это должно быть просто, но я все еще не вижу способа. Готов дать дополнительные пояснения, если это необходимо.
Спасибо всем!
Ответ №1:
Хотя я не уверен, чего вы пытаетесь достичь с помощью SELECT *
при использовании GROUP BY
, в качестве основы для заказа будет взята последняя дата:
SELECT * FROM messages GROUP BY who ORDER BY MAX(date) DESC;
Ответ №2:
Если вы просто хотите упорядочить его по дате последней отправки, то просто измените запрос на:
SELECT * FROM messages ORDER BY date DESC
Это просто упорядочит его самым последним первым, самым старым последним
Комментарии:
1. Ответ Родена великолепен, если вы просто хотите получить последний ответ и сгруппировать с
who
Ответ №3:
Почему бы просто не выбрать * из порядка сообщений по возрастанию, по дате desc?
Ответ №4:
попробуйте это:
ВЫБЕРИТЕ distinct m.who, m.* ИЗ сообщений m в порядке по дате desc