2012-05-12 42 views
0

我試圖通過使用SQL Server的ROW_NUMBER函數來顯示,每頁10筆2008SQL Server 2008中的分頁PHP

我覺得有什麼不對我的查詢,因爲我只定義在哪裏開始,到哪裏結束顯示記錄(從1到10),但不是每頁顯示的記錄數量。

當我進入下一頁時,我根本得不到任何結果,因爲我不知道如何正確地將$ per_page變量添加到我的SQL查詢中。

所有我想要的是能夠顯示第1頁第10個產品ID,有一次我點擊「下一步」按鈕,接下來的10種產品標識的顯示等

這是代碼,我現在所擁有的:

$per_page = 10; 

if(!isset($_GET['page'])) 
{ 
    $page = 1; 
} 
else 
{ 
    $page = $_GET['page']; 
} 

if($page<=1) 
{ 
    $start = 0; 
} 
else 
{ 
    $start = $page * $per_page - $per_page; 
} 

$tsql = " SELECT * 
FROM (SELECT ROW_NUMBER() OVER(ORDER BY productID) AS 
rownum, productID FROM products) AS products1 
WHERE rownum >= $start AND rownum <= $per_page"; 


$num_rows = sqlsrv_num_rows(sqlsrv_query($conn,$tsql)); 

$num_pages = ceil($num_rows/$per_page); 

$stmt = sqlsrv_query($conn,$tsql); 
while($row = sqlsrv_fetch_array($stmt)){ 

      echo $row['productID']. "<br/>"; 

} 


$prev = $page - 1; 
$next = $page + 1; 


echo "<hr>"; 

//prev 
if($prev > 0) 
{ 
    echo "<a href='?page=$prev'>prev</a> "; 
} 

//numbers 
$number = 1; 
for($number; $number <= $num_pages; $number +=1) 
{ 
    if($page==$number) 
    { 
     echo " <b>[$number]</b> "; 
    } 
    else 
    { 
     echo "<a href='?page=$number'>$number</a> "; 
    } 
} 

//next 

    echo "<a href='?page=$next'>next</a>"; 

回答

1

我不熟悉SQL服務器,但在我看來,你只需要在終點:

$tsql = " SELECT * 
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY productID) AS 
    rownum, productID FROM products) AS products1 
    WHERE rownum >= $start AND rownum < ($start + $per_page)"; 
             ^ changed ^

如果$page應該是一個整數,它總是最好的,以確保它是:

$page = (int) $_GET['page']; 
+0

非常感謝你,吉榮!我現在能夠通過我的「下一個」和「前一個」按鈕瀏覽我的所有頁面!我現在唯一的問題是我想要實施的「數字」部分。我的頁碼根本不顯示,我認爲它與我的$ num_pages和$ num_rows變量有關,特別是這行:「$ num_rows = sqlsrv_num_rows(sqlsrv_query($ conn,$ tsql));」我跟着一個mysql分頁教程,並試圖將其轉換爲SQL服務器,但我認爲我在這些行的某處犯了錯誤? – Alex

+0

@Alex就像我說的,我不是使用sql server的家庭成員,但是我的猜測是'$ num_rows'只返回查詢(10)中的行數,所以'$ num_pages'將始終爲1 。 – jeroen