2012-05-12 5 views
0

Я пытаюсь отобразить 10 записей на страницу с помощью row_number функции SQL SERVER 2008.SQL Server 2008 Разбивка PHP

Я думаю, что есть что-то не так с моим запросом, потому что я только определить, где начать и где закончить отображение записей (от 1 до 10), но не количество записей, отображаемых на странице.

Как я перехожу на следующую страницу, я не получаю никаких результатов, потому что я не знаю, как правильно добавить переменную $ per_page в мой SQL-запрос.

Все, что я хочу быть в состоянии отображать первые 10 идентификаторов продуктов на странице 1, и один раз я нажимаю на кнопку «Далее», будет отображаться следующие 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 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 должен быть целое число, всегда лучше убедиться в том, что оно:

+0

Большое спасибо, jeroen! Теперь я могу просматривать все мои страницы с помощью кнопок «next» и «prev»! Единственная проблема, с которой я столкнулся сейчас, - это раздел «числа», который я также хотел бы реализовать. Мои номера страниц вообще не отображаются, и я думаю, что это имеет какое-то отношение к моим переменным $ num_pages и $ num_rows, особенно к этой строке: «$ num_rows = sqlsrv_num_rows (sqlsrv_query ($ conn, $ tsql)); mysql pagination tutorial и попытался преобразовать его на SQL-сервер, но я думаю, что я ошибся где-то в этих строках? – Alex

+0

@Alex Как я уже сказал, я не famil'iar с sql-сервером, но я предполагаю, что '$ num_rows' возвращает только количество строк из вашего запроса (10), поэтому' $ num_pages' всегда будет 1 , – jeroen