PHP: <?php //Подключение к базе данных require_once 'db.php'; if (isset($_GET['id']) AND !empty($_GET['id'])) { $view = "SELECT * FROM `info` WHERE id='".mysql_real_escape_string($_GET['id'])."'"; $result = mysql_query($view); $info = mysql_fetch_array($result); } else { //Количество выводимых записей на страницу $nums = 25; //Запрос *.php?page= if (isset($_GET['page'])) { $page = intval($_GET['page']); } else { $page = 1; } $query = "SELECT COUNT(*) AS `id` FROM `info`"; $sql = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_assoc($sql); //Подсчёт количества записей, выводимых из базы $elements = $row['id']; //Количество страниц с записями $pages = ceil($elements/$nums); if ($page < 1) { $page = 1; } elseif ($page > $pages) { $page = $pages; } $start = ($page-1) * $nums; if ($start < 0) $start = 0; //ORDER BY category DESC LIMIT - по какой переменной сортировать $query = "SELECT * FROM `info` WHERE category = '".$_GET['cat']."' ORDER BY id DESC LIMIT {$start}, {$nums}"; $sql = mysql_query($query) or die(mysql_error()); $con = mysql_num_rows($sql); for ($i=0; $i<$con; $i++) { $row = mysql_fetch_assoc($sql); //Дизайн одной записи echo " ".$row['id']." ".$row['title']." ".$row['text']." ".$row['id']." "; } ?> Листалка страниц (здесь всё ОК) <center> <?php //Номер категории $getcat=$category; // Вывод листалки $neighbours = 6; $left_neighbour = $page - $neighbours; if ($left_neighbour < 1) $left_neighbour = 1; $right_neighbour = $page + $neighbours; if ($right_neighbour > $pages) $right_neighbour = $pages; if ($page > 1) { print ' <a href="?page=1&cat=' . ($getcat) . '">Начало</a> ... <a href="?page=' . ($page-1) . '&cat=' . ($getcat) . '">Предыдущая страница</a> '; } for ($i=$left_neighbour; $i<=$right_neighbour; $i++) { if ($i != $page) { print ' <a href="?page=' . $i . '&cat=' . ($getcat) . '">' . $i . '</a> '; } else { // выбранная страница print ' <b>' . $i . '</b> '; } } if ($page < $pages) { print ' <a href="?page=' . ($page+1) . '&cat=' . ($getcat) . '">Следующая страница</a> ... <a href="?page=' . $pages . '&cat=' . ($getcat) . '">Конец</a> '; } } ?> $nums = 25; - это количество элементов, выводимых на страницу. $elements = $row['id']; - подсчитывает количество элементов в категории. $pages = ceil($elements/$nums); - подсчитаывает количество страниц для листалки. Но получается так, что количество страниц для определённой категории не подсчитывается, а листалка отображается исходя из общего количества данных в базе. То есть, если в общем в базе материала на 100 страниц, а в определённой категории - на 4, то листалка будет отображать 4-х нужных страницы с инфой, и 6 пустых. Если вместо $elements = $row['id']; подставить, например, $elements = 95;, то тогда пустых страниц нет (95/25). Тут вся проблема в подсчёте $elements. Что здесь можно придумать для подсчета элементов с определённым значением нужной переменной? (например, если $row['category'] равно 7)
[sql]SELECT SQL_CALC_FOUND_ROWS * FROM `info` WHERE category = .... [/sql] [sql]SELECT FOUND_ROWS()[/sql]
FOUND_ROWS() теоретически на больших таблицах будет прирост скорости, и думаю что стоит уже сейчас рассматривать систему именно в этом ключе, а не 2 полноценных запроса!