2012-02-13 67 views
3

我試圖執行其抓住所有具有給定用戶名的行的mysql命令,按日期排序它們對它們進行排序,然後只返回第5MYSQL-抓住最後5行後日期

排序的命令是

ORDER BY date 

和命令來獲得最後的5

WHERE ROWNUM <= 5 

的WHERE訂單之前來了,所以這是倒退。所以我想我必須在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,也可以指定極限:「極限5」。事實上,這是更習慣於這樣做的方式。 – 2012-02-13 05:51:58

+0

工程就像一個魅力,更乾淨。謝謝! – MintyAnt 2012-02-13 16:19:43

3

試試這個:

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

嘗試此查詢

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

我很迷惑你的頭銜和你的問題主體。 您提到過最後5條記錄。在你的問題的第一句話中,它是第一個5. 幾個字後,又是最後5個。

如果你想獲得過去5年,您也可以選擇是否需要採取小於5個的總記錄謹慎使用此

select * from table order by date limit (select count(*)-5 from table),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