Далее пример использования пагинации постраничная. Bootstrap - Pagination (навигационный блок для пагинации). Что такое пагинация

Пагинация, включая навигацию по страницам, – достаточно простая вещь, но у начинающих часто возникают проблемы с ее созданием, а главное, пониманием ее работы...

Одной из задач пагинации является одновременный вывод не всех элементов, а их ограниченного числа, скажем, не более $pp элементов, причем, какая именно группа элементов выводится, зависит от входного параметра $pn – номера этой группы. Этот номер, собственно, и есть номер страницы. Тут нужен такой запрос:

SELECT * FROM `table` LIMIT {($pn-1)*$pp},{$pp}

Значение $pn уменьшается на 1, чтобы, например, для первой страницы списка при значении $pp , равном 10, выбирались элементы с 0 по 9, а не с 10 по 19. Естественно, если страницы нумеруются с нуля, уменьшать на 1 значение $pn в запросе не нужно.

Для решения следующей задачи, а именно построения навигации по страницам, прежде всего необходимо узнать общее количество страниц списка. Для этого можно сначала запросить общее количество элементов. Или прямо в запросе вычислить общее количество страниц на основе общего количества элементов:

SELECT FLOOR((COUNT(*)+{$pp-1})/{$pp}) FROM `table`

Для получения общего количества страниц $pc здесь использована достаточно известная формула $pc=(count+per_page-1) div per_page , но с поправкой на использование функции FLOOR вместо целочисленного деления (div). Можно использовать и оператор DIV, который поддерживается в MySQL достаточно давно.

Если на страницах нужно выводить только по одному элементу, представленные выше запросы можно упростить.

После того, как общее количество страниц $pc получено, можно сразу выводить ссылки на все страницы списка при помощи цикла со счетчиком в диапазоне от 1 до $pc , однако обычно используют более изысканную навигацию, при которой одновременно выводятся ссылки не на все страницы, а только на страницы с номерами в ограниченном зависящем от номера текущей страницы диапазоне. Например, вот формулы для получения ограничивающих диапазон значений $first и $last для так называемой банковой навигации:

$first=$pn-1-($pn-2)%$range; $last=$first+$range$pc) error(404); elseif ($result=mysqli_query($link,"SELECT * FROM `table` LIMIT ".(($pn-1)*$pp).",".$pp)) { $range=6; $first=$pn-1-($pn-2)%$range; $last=$first+$range>