Общее количество записей, возвращаемых запросом с LIMIT в MySQL

25.10.2009 10:51 / Артём Волк / 3721 просмотр / ...

Для реализации пейджинга в веб-приложениях обычно необходимо узнать общее количество записей, возвращаемых определённым запросом.

Для некоторых баз данных для этого приходится делать ещё один запрос с COUNT()

В MySQL есть удобные встроенные средства.

Если в запрос добавить опцию SQL_CALC_FOUND_ROWS, а после запроса с LIMIT вызвать функцию FOUND_ROWS(), она вернёт общее количество записей подходящих под предыдущий запрос.

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

Кстати, именно этот подход используется в MySQL-драйвере библиотеке DbSimple при реализации функции selectPage().

Оригинальная документация по MySQL об этой возможности

A SELECT statement may include a LIMIT clause to restrict the number of rows the server returns to the client. In some cases, it is desirable to know how many rows the statement would have returned without the LIMIT, but without running the statement again. To obtain this row count, include a SQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke FOUND_ROWS() afterward.