2010-09-20 2 views
1

Возможно ли создать разбиение на страницы без получения всех элементов таблицы? Но со страницами в GET like/1/666 ...MySQL Pagination

+0

Возможный дубликат [Как вы реализуете разбиение на страницы в PHP?] (Http://stackoverflow.com/questions/267892/how-do-you-implement-pagination-in-php) –

+0

Все это здорово, но всего требуется количество записей. – swamprunner7

+0

все отлично. Так что просто прочитайте сумму из вашей базы данных: 'SELECT count (*) из таблицы' –

ответ

0

Вы можете использовать LIMIT для разбивки на страницы по вашему результирующему набору.

SELECT * FROM comments WHERE post_id = 1 LIMIT 5, 10 

где LIMIT 5 означает 5 комментариев и 10 - смещение. Вы можете также использовать более длинный синтаксис:

... LIMIT 5 OFFSET 10 
2

Он обычно включает в себя выдачу два запроса: один для получения «среза» набора результатов и один для получения общего количества записей. Оттуда вы можете определить, сколько страниц у вас есть, и построить соответствующую разбивку на страницы.

просто пример:

<?php 
$where = ""; // your WHERE clause would go in here 
$batch = 10; // how many results to show at any one time 
$page = (intval($_GET['page']) > 0) ? intval($_GET['page']) : 1; 
$start = $page-1/$batch; 
$pages = ceil($total/$batch); 

$sql = "SELECT COUNT(*) AS total FROM tbl $where"; 
$res = mysql_query($sql); 
$row = mysql_fetch_assoc($res); 
$total = $row['total']; 

// start pagination 
$paging = '<p class="paging">Pages:'; 
for ($i=1; $i <= $pages; $i++) { 
    if ($i==$page) { 
     $paging.= sprintf(' <span class="current">%d</a>', $i); 
    } else { 
     $paging.= sprintf(' <a href="?page=%1$d">%1$d</a>', $i); 
    } 
} 
$paging.= sprintf' (%d total; showing %d to %d)', $total, $start+1, min($total, $start+$batch)); 

А затем, чтобы увидеть ваши ссылки разбивки на страницы:

... 
// loop over result set here 

// render pagination links 
echo $paging; 

Я надеюсь, что это помогает.

+0

Просто FYI: нет необходимости делать два запроса, вы можете использовать опцию выбора SQL_CALC_FOUND_ROWS: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found -rows –

+0

Блестящий, спасибо за это! –