PHP пагинация, блог на добри програмисти

Днес реших да говоря за това как можете лесно да организирате пагинация в PHP. Може би всеки разработчик на уеб приложения се е сблъсквал със задачата да пагинира съдържанието на страниците на приложението. Като цяло алгоритъмът на този проблем винаги е приблизително един и същ.

1) Определяме текущата страница и колко записа показваме на страницата. 2) Определете колко записа имаме общо. 3) Правим избор въз основа на записите на текущата страница. 4) Показване на връзки към други страници.

Ако преобразувате низовите данни в PHP код, тогава ще изглежда нещо подобно:

Това изпълнение е съвсем подходящо, но има един момент в него, който често „разваля всички малини“. Това е необходимостта от генериране на заявка за получаване на броя на всички записи, които отговарят на текущите филтри (три реда с $count). Уловката е, че низът с условие $where не винаги е толкова лесен за получаване и заместване в заявката "SELECT COUNT". В този случай трябва да включите изобретателността си и да се измъкнете с всички налични методи. Искам да ви разкажа за една прекрасна езикова конструкция mysql, която решава този проблем и на практика не води до промяна в горния пример. Това е ключовата думаSQL_CALC_FOUND_ROWS, която може да се използва в заявка SELECT, ако съдържа ключовата дума LIMIT. Тази ключова дума казва на Mysql да съхранява общия брой записи, които са били извлечени от заявката, преди да бъде приложено ограничението LIMIT (ако не сте наясно, ограничението LIMIT се задейства, след като всички редове на заявката са били извлечени). За да получите този съхранен номер, се използва и заявка, която ще работи много по-бързо от заявката SELECT COUNT. В крайна сметка нашият код ще бъде промененпо следния начин:

Както можете да видите, промените са минимални. Удобството на този подход обаче е очевидно 🙂