2012-02-13 3 views
3

Я пытаюсь выполнить команду MYSQL, которая захватывает все строки с заданным UserID, сортирует их по дате, а затем возвращает только первый 5.MYSQL- захватить последние 5 строк после сортировки их по дате

команда сортировки

ORDER BY date 

и команда, чтобы получить последние 5

WHERE ROWNUM <= 5 

ГДЕ приходит перед заказом, так что в обратном направлении. Поэтому я решил, что должен иметь инструкцию Mysql в инструкции mysql.

Вот моя попытка. Я получал ошибку псевдонима, поэтому я добавил AS T1 в команду.

SELECT * FROM 
(SELECT voting_id, caption_uid, voting_date, rating FROM voting 
    WHERE user_id = $inUserID AS T1 
    ORDER BY voting_date) 
WHERE ROWNUM <= 5 AS T2; 

Любые идеи?

ответ

11

Как вы работаете с MySQL, почему бы не использовать пункт LIMIT, чтобы сохранить только первые 5 результатов?

select * 
from your_table 
order by your_column 
limit 0, 5 


Цитирование часть the manual page for select:

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

С двумя аргументами первый аргумент указывает смещение первой строки для возврата, а второй указывает максимальное количество возвращаемых строк.

+0

Обратите внимание, что вы также можете указать только предел, если смещение равно 0: 'limit 5'. На самом деле, это более идиоматический способ сделать это. –

+0

Работает как очарование, и намного чище. Спасибо! – MintyAnt

3

Попробуйте это:

select voting_id, caption_uid, voting_date, rating from voting 
where user_id = $inUserID 
order by voting_date 
limit 5 

Edit:

Не ясно, хотите ли вы первый или последний 5. Если вы хотите, последние пять, то порядок должен быть по:

order by voting_date desc 
0

Попробуйте этот запрос

Select columns from table_name where user_id =x order by dateField desc Limit 5 
0

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

Если вы хотите получить последний 5, вы можете использовать этот

select * from table order by date limit (select count(*)-5 from table),5 

, если вам нужно заботиться о менее 5 полных записей, необходимо использовать следующее:

select * from table order by date limit (select case when count(*)>=5 then count(*)-5 else 0 end case from table),5 

Если вы можете использовать хранимую процедуру, производительность будет быстрее, если вы находитесь во втором примере.

declare @total; 
select @total = count(*) from `table`; 
case when @total<5 then 
@total=0; 
else //mysql require case/else 
end case; 
select * from `table` order by `date` limit @total, 5 
Смежные вопросы