message_id | sender_id | recepient_id | subject | message | time
В этой таблице содержится 4000000 записей. Мне необходимо из нее выбрать последние сообщения всех пользователей. Я пробовал делать выборку таким запросом:
SELECT `sender_id`, `subject`, `message`, `time`
FROM `messages`
GROUP BY `sender_id`
ORDER BY `time` DESC
Запрос ошибок не выдает, выбирает по одному сообщению для каждого пользователя, но при проверке оказалось что он выбирает не последние сообщения. Подскажите в чем может быть ошибка и как правильно составить такой запрос.
Спустя 17 минут, 13 секунд (31.01.2012 - 09:42) Игорь_Vasinsky написал(а):
Цитата |
то он выбирает не последние сообщения |
а какие? или секрет?
у тя time - у поля какой формат? а данные в каком виде?
Спустя 10 минут, 52 секунды (31.01.2012 - 09:53) at0m1x написал(а):
Поле time - тип данных DATETIME
Спустя 2 минуты, 27 секунд (31.01.2012 - 09:55) Игорь_Vasinsky написал(а):
Цитата |
а какие? или секрет? |
Спустя 2 часа, 45 минут, 52 секунды (1.02.2012 - 12:41) maximka787 написал(а):
Этот запрос верный. Ошибок не может быть, если только дата в нормальном виде DATETIME и вставляется неплохо, если автоматически (Now())
Спустя 43 минуты, 30 секунд (1.02.2012 - 13:25) alexbel2404 написал(а):
ну можно по message_id сортировать, если оно автоинкремент.
Спустя 7 минут, 7 секунд (1.02.2012 - 13:32) dadli написал(а):
at0m1x
попрубуите так:
попрубуите так:
SELECT sender_id,message FROM messages
INNER JOIN
(SELECT sender_id AS s_i,MAX(`time`) AS m_t FROM messages GROUP BY sender_id) AS t
ON messages.sender_id = t.s_i AND messages.`time` = t.m_t