Очень часто встречающаяся задача вывести данные из БД, при этом разбив по страницам. Первая идея которая приходит в голову сделать дубль запроса с подсчетом строк и поделить на количество строк которые будут выводиться на одной страницы. Но естественно меня это не устраивает по причинам:

  1. Лишний запрос к БД.
  2. Не удобно использовать, так как функцией сделать для разных видов запросов не возможно, а я хотел, чтобы все считалось именно функцией.

Решением этой задачи стала опция в select запросе - SQL_CALC_FOUND_ROWS которая запоминает количество найденных строк в запросе и возвращает при запросе SELECT FOUND_ROWS(). Эта опция и дает возможность создать функцию которая запускается после основного запроса и выводит список страниц.
Читать запись полностью »