Я пытаюсь разбить на страницы результаты SQL-запроса для использования на веб-странице. Язык и база данных: PHP и SQLite.
Код, который я использую, работает примерно так (нумерация страниц начинается с 0)
http://example.com/table?page=0
page = request(page)
per = 10 // results per page
offset = page * per
// take one extra record so we know if a next link is needed
resultset = query(select columns from table where conditions limit offset, per + 1)
if(page > 0) show a previous link
if(count(resultset) > per) show a next link
unset(resultset[per])
display results
Есть ли более эффективные способы разбиения на страницы, чем этот?
Одна проблема, которую я вижу в моем текущем методе, заключается в том, что я должен сохранить все 10 (или сколько угодно) результатов в памяти, прежде чем я начну их отображать. Я делаю это, потому что PDO не гарантирует, что количество строк будет доступно.
Эффективнее ли выполнить запрос COUNT(*)
, чтобы узнать, сколько строк существует, а затем передать результаты в браузер?
Является ли это одним из тех «это зависит от размера вашей таблицы, и требует ли запрос count(*)
полного сканирования таблицы в бэкэнде базы данных», «выполнить некоторые профилирующие вопросы»?