MYSQL - взять последние 5 строк ПОСЛЕ сортировки по дате - PullRequest
3 голосов
/ 13 февраля 2012

Я пытаюсь выполнить команду 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;

Есть идеи?

Ответы [ 4 ]

11 голосов
/ 13 февраля 2012

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

select *
from your_table
order by your_column
limit 0, 5


Цитируя часть страницы руководства для select:

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

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

3 голосов
/ 13 февраля 2012

Попробуйте:

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

Редактировать:

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

order by voting_date desc
0 голосов
/ 13 февраля 2012

Я запутался с вашим названием и телом вопроса.Вы упомянули последние 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
0 голосов
/ 13 февраля 2012

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

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