2012-05-12 3 views
0

내가 SQL 서버의 ROW_NUMBER 함수를 사용하여 페이지 당 10 개 개의 레코드를 표시하려고 나는 경우에만이를 위해 어디서부터 시작을 정의하고 있기 때문에 내 쿼리에 문제가 있다고 생각 2008 년SQL 서버 2008 매김 PHP

레코드는 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>"; 

답변

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