2016-04-02 88 views
-2

有沒有什麼辦法在不同的查詢中從數據庫中獲取最新的,第二到最新的和第三到最新的記錄?因爲我想爲每個查詢使用我的滑塊圖像/內容。請告訴我,如果我的問題很混亂。從數據庫中獲取最新的,第二到最新的和第三到最新的記錄

我知道有一種方法使用order by desc iddate, limit 3,但只有一個查詢,我想知道是否有一種方法可以獲取第二個到最新的和第三個到最新的記錄。我知道最新的查詢可以寫成像order by desc iddate, limit 1,我只是不知道如何查詢第二和第三到最新的記錄。

+0

所以我的答案是否適合你?你是用另一種方式表達什麼意思?在您要求我們尋求幫助之前,您嘗試了什麼?你得到的錯誤是什麼? – androidnation

+0

如果我將獲取最新的3條記錄,你的答案將起作用。我用另一種方式的意思是用最新的記錄,查詢將會像'SELECT * FROM slider ORDER BY date DESC LIMIT 1'一樣。但是當我想獲得第二張最新唱片的時候,我不再有想法該怎麼做。我嘗試搜索,但我得到的是如何一次獲取最新的3條記錄,這不是我想要做的。 @androidnation – louie

+0

嘗試獲取數組中的所有行,然後使用索引獲取第二個最後的 – androidnation

回答

1

以下是使用LIMITOFFSET的一種解決方案。

-- latest 
order by desc id/col_date desc limit 1 

-- 2nd to latect 
order by desc id/col_date desc limit 1,1 

-- 3rd to latect 
order by desc id/col_date desc limit 2,1 

演示:

mysql> select * from (select 1 as a union select 2 union select 3) t; 
+---+ 
| a | 
+---+ 
| 1 | 
| 2 | 
| 3 | 
+---+ 
3 rows in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1; 
+---+ 
| a | 
+---+ 
| 3 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1,1; 
+---+ 
| a | 
+---+ 
| 2 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 2,1; 
+---+ 
| a | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

參考:

http://dev.mysql.com/doc/refman/5.7/en/select.html

LIMIT子句可以被用來限制的行數由SELECT語句返回 。 LIMIT採用一個或兩個數字參數 ,它們都必須是非負整數常量,這些例外都是 例外:

在預準備語句中,LIMIT參數可以使用? 佔位符標記。

在存儲的程序中,可以使用整數值例程參數或局部變量來指定LIMIT參數。

使用兩個參數,第一個參數指定要返回的第一行的偏移量,第二個參數指定要返回的最大數量的行數 。初始行的偏移量爲0(不是1):

SELECT * FROM tbl LIMIT 5,10; #檢索行6-15

+0

可以解釋爲什麼1,1和2,1?對不起,我只是想知道爲什麼這樣。 :) – louie

+0

哇,你是個天才!先生,謝謝你!非常感謝。並感謝您的參考! – louie

相關問題