2014-01-25 2 views
0

Я пытаюсь получить список n последних записей в базе данных, но сортировать их по возрастанию.MySQL последние n записей, по возрастанию?

Очевидно, что я могу использовать следующий, чтобы получить первые п записей:

SELECT owner_id,message 
FROM messages 
WHERE thread_id = ? 
ORDER BY time ASC 
LIMIT ? 

Или это, чтобы получить наиболее 5 недавний, по убыванию:

SELECT owner_id,message 
FROM messages 
WHERE thread_id = ? 
ORDER BY time DESC 
LIMIT ? 

Но как я могу получить самый последний 5 в порядке возрастания? Я могу просто изменить порядок массива в PHP, но это кажется немного неэффективным.

ответ

5
Select * from 
(SELECT owner_id,message,time 
FROM messages 
WHERE thread_id = ? 
ORDER BY time DESC 
LIMIT ?) test 
Order by time ASC 

Sample fiddle

+0

Спасибо, это выглядит на правильном пути, но я получаю сообщение об ошибке от него. Когда я пытаюсь получить доступ к столбцу времени тестового псевдонима, мне сообщают «Неизвестный столбец» в разделе «порядок заказа». Я попытался получить к нему доступ как test.time, но MySQL тоже этого не принял. – nathan

+0

под редакцией. Посмотри сейчас. Вы должны получить поле времени также в наборе результатов temp –

+0

Ха-ха, я думаю, мне следовало бы это понять. Благодаря! – nathan

3
select owner_id,message from (
    SELECT owner_id,message,time 
    FROM messages 
    WHERE thread_id = ? 
    ORDER BY `time` DESC 
    LIMIT ? 
) temp 
order by time ASC 
+0

Вы правы, теперь все в порядке. – immo

+0

Ошибки, ошибки, ошибки .... :) теперь он отлично работает – immo

Смежные вопросы