2012-05-12 12 views
0

私は、SQL ServerのROW_NUMBER関数を使って、ページあたり10件のレコードを表示しようとしています、私は私が場所だけ最後までどこから始めれば定義しているので、私のクエリに何か問題があると思い、2008年SQL Server 2008のページネーションPHP

1から10までのレコードを表示しますが、ページごとに表示されるレコードの量は表示しません。

次のページに進むと、$ per_page変数をSQLクエリに正しく追加する方法がわからないため、結果がまったく表示されません。

私が欲しいのは、1ページの最初の10個の製品IDを表示することが可能である、と私は、「次へ」ボタンをクリックすると、次の10の製品ID等

これは、表示されます。私が今持っているコード:

$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 Serverに慣れていないんだけど、あなただけのエンドポイント必要私には思える:

$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