Как лучше всего разбивать результаты на страницы в php?
-
01-07-2019 - |
Вопрос
Мне нужно отобразить на сайте много страниц новостей.
Должен ли я выполнять разбиение на страницы в запросе к базе данных с использованием лимита или делать это в своем php-скрипте после получения всех результатов?
Решение
Используйте лимит в SQL!Каждый раз!
В противном случае вы перебрасываете значительно больше данных, чем нужно, что делает ваши сценарии неоправданно медленными и приведет к проблемам масштабируемости по мере увеличения объема данных в ваших таблицах.
Лимит – твой друг!
Другие советы
Ограничение использования — вы не хотите передавать большие объемы данных из базы данных в механизм сценариев, если можете этого избежать.
Если вы хотите работать только с СУБД, которая это поддерживает, делайте это в СУБД.Если вы хотите поддерживать другие СУБД в будущем, добавьте слой между ними, который может обрабатываться в зависимости от текущей СУБД.
Вы можете использовать некоторые существующие библиотеки, чтобы помочь вам:
Груша::Пейджер может помочь с выводом, а чтобы ограничить трафик базы данных только тем, что вам нужно, вы можете использовать оболочку, представленную в прилагаемых к ней примерах.
Вот руководство Я просто погуглил, там все есть...
Помимо использования LIMIT
, я бы предложил использовать явное WHERE
предложение, чтобы установить смещение и упорядочить результаты в этом столбце.Например:
--- First page (showing first 50 records)
SELECT * FROM people ORDER BY id LIMIT 50
--- Second page
SELECT * FROM people WHERE id > 50 ORDER BY id LIMIT 50
Это еще больше ограничивает количество возвращаемых строк до тех, которые находятся в желаемом диапазоне.Используя WHERE
подход (в отличие от LIMIT
предложение с отдельным смещением, например. LIMIT 50,50
) позволяет эффективно справляться с постраничным просмотром записей с другими естественными ключами, например.в алфавитном порядке по имени или по дате.
Лично я бы использовал для этого запрос.Очевидно, что это может измениться, если вы имеете дело с AJAX и тому подобным, но простое выполнение базового ограничения в запросе и вывод результатов — это просто и эффективно.