0

SQL SERVER 2008のROW_NUMBER関数を使用して、ページごとに10レコードを表示しようとしています。

レコードの表示を開始する場所と終了する場所(1から10)のみを定義し、ページごとに表示されるレコードの量は定義しないため、クエリに問題があると思います。

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

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>";
4

1 に答える 1

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'];
于 2012-05-12T02:10:10.077 に答える