2009-08-10 93 views
25

假設我在MySQL表中有50行。我想選擇前十(LIMIT 10),但是我希望能夠選擇不同頁面上的下10個。如何從給定的行號開始選擇MySQL中的行?

那麼,如何開始我的選擇,排10後?

更新查詢:

mysql_query(" 
    SELECT * FROM `picdb` 
    WHERE `username` = '$username' 
    ORDER BY `picid` DESC 
    LIMIT '$start','$count' 
") 
+1

嘗試 的mysql_query( 「SELECT * FROM'picdb' WHERE'username' = '$用戶名' ORDER BY'picid' DESC LIMIT $開始,$數」) – Rufinus 2009-08-10 00:32:47

+1

重新編輯,你應該把你的錯誤反饋設置直到它會告訴你你的SQL有什麼問題。你會發現你有一個語法錯誤,因爲你的'LIMIT'子句在'ORDER BY'子句之前。 – chaos 2009-08-10 00:32:51

+0

謝謝你們,現在工作正常。 – mrpatg 2009-08-10 00:41:15

回答

52

我建議通過使用獲得的第一頁的工作:

LIMIT 0, 10 

然後第二頁

LIMIT 10, 10 

然後

LIMIT 20, 10 

第三頁,依此類推。

+0

對不起,但我不知道這是如何工作?它適用於我,但我無法得到它,是否意味着從最多10行開始盯着21? – engma 2012-10-02 12:46:11

+0

我一直在做一些搜索有一段時間了,並且起始編號取決於發動機,當我與InnoDB的測試,它開始與0而不是1,所以你應該檢查你的引擎的喜好。 – engma 2012-10-03 17:10:02

+1

@ Developer106:實際上,我無法在任何情況下複製以1開頭的索引,所以我不知道以前的答案是如何發生的。 – chaos 2012-10-03 19:54:12

25
LIMIT 10 

LIMIT 10 OFFSET 10 

MySQL 5.1 docs on SELECT syntax

對於兼容PostgreSQL, MySQL也支持LIMIT ROW_COUNT OFFSET偏移語法。

+2

這有效嗎?我從來沒有見過。 – mpen 2009-08-10 00:42:11

+7

我不確定OFFSET有多廣泛;但它更清楚一點,因爲您不必記住哪個數字是限制,哪個數字是抵消。 – 2009-08-10 00:46:59

+3

1,因爲我不知道他們會端起英寸 – chaos 2009-08-10 01:37:43

1

這個問題是舊的,但我只是想補充一點,沒有硬編碼代碼,得到的答案混亂給了意味着你必須硬編碼腳本(Select語句)。您可以通過獲取文件名獲得相同的結果,然後根據當前頁面從數據庫中選擇數據,而不用硬編碼選擇語句。 首先獲取當前頁面

$page = basename($_SERVER['SCRIPT_FILENAME']); 
$page_counter = rtrim($page, ".php"); 
//setting your limit 
$start = 0; 
$limit = 10; 
//if current page is not index.php then $start = ($limit * page_counter); 
// e.g if current page is 1.php then $start = ($limit * 1) = 10 
//if current page is 2.php then $start = ($limit * 2) = 20 
if ($page !== 'index.php') { 

$start = ($limit * $page_counter); 
} 
//getting row count 
$ROW_COUNT = $db->query('SELECT * from tableName')->rowCount(); 

//getting number of rows left in the table 
$rows_left = ("SELECT * FROM tableName limit ?,?"); 
$rows_left = $db->prepare($rows_left); 
$rows_left->execute(array($start,$ROW_COUNT)); 
$rows = $rows_left->fetchAll(PDO::FETCH_ASSOC); 

$number_rows = 0; 
foreach ($rows as $r) { 
$number_rows = $number_rows + 1; 
} 
//if number of rows left in the table is less than 10 then $limit = the number of rows left 
if ($number_rows < 10) { 
$limit = $number_rows; 
} 

//getting all rows 
      $getRows = "SELECT * FROM tableName limit ?,?"; 
      $getRows = $db->prepare($getRows); 
      $getRows->execute(array($start , $limit)); 
      $getRows = $getRows->fetchAll(PDO::FETCH_ASSOC); 
0
select * from 'table_name' 
ORDER BY 'column_id 'DESC 
LIMIT 0,10; 

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 10,10; 

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 20,10; 

,繼續,直到你想要的數字。

+0

歡迎計算器!這是一個相當古老,流量很大的問題,你的答案是否增加了其他方面的東西,已經確定的答案不是?一般來說,如果您可以編輯現有的已接受的答案以反映任何必要的更改而不是整個新答案,則會更好,因爲大多數用戶不會滾動到底部(答案將顯示在答案中),答案將會是。 – zack6849 2017-04-11 11:25:00

相關問題