2011-04-29 35 views
9

我有一個只顯示10行的列表。在mysql中選擇next/previous 10 rows

我需要選擇下10行和前10行。但是,我用作參考的ID並不完全按順序排列。 (例如1,2,5,10,15)。我如何選擇使用ID的接下來的幾行?

回答

22

你可以嘗試限制:

select * from `table` limit <startIndex>,<NumberOfRecords>; 

例如: -

select * from `user` limit 5,10; 

這將返回從第6行開始的10行。

+0

是startindex的ID?我用什麼參考? – tep 2011-04-29 10:23:56

+0

謝謝,我如何獲得startindex(行號)?對不起,在mysql中仍然是新的。 – tep 2011-04-29 10:25:23

+0

@tep:如果您在列中有順序標識,則將id設爲rowNumber。 – 2011-04-29 10:26:29

-1

您可以使用限制 MySQL的關鍵字。

1
(
SELECT * 
FROM mytable 
WHERE id < $myid 
ORDER BY 
     id DESC 
LIMIT 10 
) 
UNION ALL 
(
SELECT * 
FROM mytable 
WHERE id >= $myid 
ORDER BY 
     id 
LIMIT 10 
) 
ORDER BY 
     id 
+0

即時使用類似查詢。但是,我遇到的問題是與ID。一些行正在重複顯示。 – tep 2011-04-29 10:30:27

3

一個可能的查詢將是

SELECT * FROM mytable WHERE id > current_id LIMIT 10 

爲10以前

SELECT * FROM mytable WHERE id < current_id ORDER BY id DESC LIMIT 10 
+0

嗨,即時通訊使用類似的查詢。但是,如何更新ID以便當用戶再次單擊時,將再次顯示接下來的10行。 – tep 2011-04-29 10:44:18

+0

這一個是最好的與阿賈克斯;) – 2014-06-27 10:59:33

+0

你是不是依靠ID始終提取順序爲此工作?當然,應該是這樣的,但是總會有一行被刪除的可能性,所以接下來的10個ID不一定是接下來的10個數字。如果沒有邏輯知道你以前的運行結束了什麼,那麼你最終會得到重複的結果。 – Brian 2017-08-07 19:29:19

0

首先選擇10第一值:

SELECT * FROM `leave_type` ORDER BY id asc limit 10; 

然後

select * from `leave_type` limit 10, 10; 

將在第10個值(範圍10)後顯示行,並從第11個開始。