У меня есть следующая таблица с комментариями на сайте: Page - ID страницы, где должен выводиться данный комментарий. Таким образом на странице 2, будут выводиться комментарии, где page = 2. Как в таком случае сделать постраничную навигацию? То есть в обычном случае я бы просто получил с какого по какой ID комментария мне выводить. Например, на первой странице комментарии с ID 1-10, на второй с ID 11-21 и т.д.? Но в этом случае так не получиться, так как комментарии с ID 1-10, могут содержать разные page. Как в таком случае поступить?
Раз page и есть тот критерий, по которому группируются записи, то пишем в MySQL запросе условие WHERE page='2'. Также нужно добавить ограничитель LIMIT, чтобы собирать результат постранично. Код (Text): $length = 10; //элементов на одну страницу $start = $pageNum * $length + 1; //$pageNum - номер страницы "SELECT * FROM моя_таблица WHERE page='2' LIMIT $start,$length;" То есть выбираются записи, соответствующие странице 2, потом из этого списка выбирается диапазон от $start до $start+$length.
вот таблица. вот код: Код (Text): $comment = $_GET["comments"]; $select_comments = mysql_query("SELECT * FROM `comments` WHERE page = $id"); $length = 2; $start = $comment * $length - $length + 1; $finish = $comment * $length; $select_comments = mysql_query("SELECT * FROM `comments` WHERE `page` = '$id' LIMIT $start, $finish"); while ($comments = mysql_fetch_array($select_comments)) { echo '<div class = "comments"><b>'.htmlspecialchars($comments["name"]).'</b><br>'.htmlspecialchars($comments["message"]).'</div>'; } вот страница: index.php?page=2&comments=3 По идеи должно выводить сообщения с 4 по 6. Но выводит 4 сообщения с ID 6, 7, 8, 9 из таблицы. В чём проблема?
Ну а насчет где проблема.... ее нет. Давайте посчитаем вместе вот страница: index.php?page=2&comments=3 $length = 2; $start = 3*2-2+1 = 6-2+1= 4+1=5 $finish = 3*2 = 6 т.е. возвращает с 6 позиции 6 элементов Все правильно.
Простейший пейджер всего с 1 запросом. Код (PHP): $id=(int)$_GET['id'];//id страницы с комментариями $comment=(isset($_GET['comments']))?(int)$_GET['comments']:0; if($comment<0){$comment=0;} $length = 3; //элементов на одну страницу $start = $comment * $length; $lengthsql=$length+1; //из БД берём на 1 элемент больше, чтобы использовать потом в формировании ссылок $select_comments = mysql_query("SELECT * FROM comments WHERE page='$id' LIMIT $start,$lengthsql"); $count = mysql_num_rows($select_comments); //если получили меньше, чем $length, значит это последняя страница echo "<dl>\n"; for($i=0;$i<$length;$i++){ $comments = mysql_fetch_array($select_comments); echo '<dt>',$comments['name'],'</dt><dd>',$comments['message'],"</dd>\n"; } echo "</dl>\n"; //формируем ссылки для листания $forv=($count >= $lengthsql)?($comment+1):$comment; $back=($comment > 0)?($comment-1):0; echo '<div>[url="?id=',$id,'&comments=',$forv,'"]вперед >>[/url]</div>';