Как сделать постраничный вывод из mysql "как в яндексе"? по 10 записей на страницу, внизу - ссылки на остальные страницы?
Сначала научимся получать из базы нужное количество записей. Их получение в mysql обеспечивается оператором LIMIT, который вызывается с двумя параметрами - с какой записи начинать, и сколько выводить (внимание! не по какую, а сколько!) SELECT * FROM table LIMIT 0,10 этот запрос вернет записи с первой по 10, поскольку нумерация начинается с 0 соответственно, запрос для третьей страницы будет выглядеть, как SELECT * FROM table LIMIT 20,10 получается, что нам всего лишь надо передать в скрипт число, которое потом подставить в запрос. Этим будет заниматься код, который выводит ссылки на страницы. Естественно, в цикле. Для цикла нам понадобится количество записей, которое возвращает запрос без лимита.
Пример постраничной разбивки вывод из mysql, и перелистывания (php) Сперва незначительные украшения. Во-первых, некрасиво, что номер страницы не совпадает с тем, что видно в адресной строке. Эту проблему можно решить, передавая по ссылке номер страницы в человекопонятном формате, а в скрипте вычислять первый операнд для LIMIT. Во-вторых, мы явно захотим выделить текущую страницу, не оформляя ее ссылкой. В-третьих, мы захотим нумеровать записи
что у нас в результате получилось?
Код
// количество записей, выводимых на странице $per_page=10; // получаем номер страницы if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0; // вычисляем первый оператор для LIMIT $start=abs($page*$per_page); // составляем запрос и выводим записи // переменную $start используем, как нумератор записей. $q="SELECT * FROM `table` ORDER BY field LIMIT $start,$per_page"; $res=mysql_query($q); while($row=mysql_fetch_array($res)) { echo ++$start.". ".$row['field']."<br>\n"; }
// дальше выводим ссылки на страницы: $q="SELECT count(*) FROM `table`"; $res=mysql_query($q); $row=mysql_fetch_row($res); $total_rows=$row[0];