Более эффективно, быстро и удобно для сервера разбивать результаты на несколько страниц.
С одной стороны, большинство пользователей не собираются смотреть дальше первых X результатов независимо от того, сколько их на одной странице, поэтому будет много неиспользованных результатов, которые были получены, обработаны и отправленыклиент, который тратит впустую пропускную способность и процессорное время.На самом деле, разбивая на страницы, вы увеличиваете вероятность того, что они продолжат дальше, чем они остановились бы, если бы все было на одной странице.
Два, если бы это были только текстовые данные, это было бы довольно быстро даже длябольшой объем данных, но если вы добавляете картинки и материалы, которые должны отображаться для каждого результата, например, в каталоге, то вещи действительно начинают замедляться, чем больше результатов возвращается.
Разбивка на страницы через LIMITв SQL это делается с помощью диапазона Limit.Если для запроса LIMIT в SQL-запросе указан один аргумент, он вернет до такого количества результатов, поэтому SELECT * FROM table LIMIT 5
вернет не более 5 результатов.Когда заданы два аргумента, он пропускает результаты, пока не достигнет первого аргумента, а затем возвращается к следующему количеству результатов.Итак, SELECT * FROM table LIMIT 40,10
вернет не более 10 записей, начиная с 41-го результата.
Итак, вам нужен какой-то способ сообщить серверу, какую страницу или результат хочет получить клиент, обычно это делаетсянумерация страниц разбивается на что-то вроде: http://www.domain.com/search.php?p=4
или http://www.domain.com/search.php?r=40
, после чего вы используете это значение через $ _GET, чтобы определить, какими будут ограничения в запросе SQL.Что-то вроде (в данном случае используется передача номера страницы с помощью get):
<?php
$sql = "SELECT * FROM `table`"; //Set up initial query string
$max_per_page = 20; //Max results per page, can be drawn from elsewhere/configuration file or something or declared directly
if(isset($_GET['p'])) //Check to see if $_GET['p'] is set
{
$current_limit = abs((int)$_GET['p'] - 1) * $max_per_page; //Current limit = max * (current page - 1) other wise, page 2 would have a starting point of 40 instead of 20 like it should. When passing the result number to start on, you'd just use that instead
}
else
{
$current_limit = 0;
}
$sql .= ' LIMIT ' . $current_limit . ', ' . $max_per_page; //Construct LIMIT on end of query string
$result = mysql_fetch_assoc(mysql_query($sql));
?>
О, и для определения итоговых результатов вы можете выполнить оператор типа SELECT COUNT(*) FROM table WHERE etc. etc.
, чтобы начать с него, чтобы вы зналиитоговые результаты, которые можно использовать для определения необходимого количества страниц, поскольку вы знаете максимальные результаты на страницу.