2014-01-08 46 views
0

我試圖根據用戶點擊的鏈接來設置查詢的LIMIT值。限制哪些行被選中 - mysql

此代碼檢查,如果用戶點擊該鏈接,並設置相應的值:

if(isset($_GET['page']) && $_GET['page']>0){ 
    $y = $_GET['page']; 
    $upper = $y * 10; 
    $lower = $upper - 10; 
    $limit = "$lower,$upper"; 
} 
else{ 
    $limit = "0,10"; 
} 

例如,如果鏈路是"index.php?page=1" 極限將是0,10

如果鏈接page=2 極限將是10,20

查詢:

$sql = mysql_query("select * from comments order by time desc limit $limit") or die (mysql_error()); 

出於某種原因,它不選擇我想要的行。 我在做什麼錯?

+0

它選擇了哪些行? – Popnoodles

+1

您是否試圖直接在MySQL數據庫上執行查詢,而不是通過PHP?它輸出什麼? –

+0

page = 1按預期選擇10行,page = 2選擇20行,第3頁選擇22 ... – Alex

回答

4

它不是「較低,較高」。它是「偏移量,行數」。這意味着,你想要的圖案

  1. 0,10
  2. 10,10
  3. 20,10
  4. 30,10

等等。

1

您的分頁邏輯錯誤。

查看LIMIT子句手冊:

在有兩個參數,第一參數指定的偏移 第一行的返回,並且第二個指定的 行的最大數目返回。在初始行的偏移量是0(不是1):

$page = isset($_GET['page']) && $_GET['page'] > 0 ? $_GET['page'] : 1; 

$per_page = 10; 
$offset = ($page - 1) * $per_page; 
$limit = "$offset, $per_page"; 
0

LIMIT的第二個參數是你想要的查詢返回的行數。如果您想每次選擇最多10行,您應該修復它在10

if(isset($_GET['page']) && $_GET['page']>0){ 
    $y = $_GET['page']; 
    $lower = $y * 10 - 10; 
    $limit = "$lower,10"; 
} 
else{ 
    $limit = "0,10"; 
}