Подтвердить что ты не робот

Получить общее количество строк при использовании LIMIT?

Возможный дубликат:
Найти общее количество результатов в mySQL-запросе со смещением + лимит

У меня очень сложный sql-запрос, который возвращает результаты, разбитые на страницы. Проблема состоит в том, чтобы получить общее количество строк перед LIMIT. Мне нужно дважды выполнить sql-запрос. Первый раз без предложения limit, чтобы получить общее количество строк. SQL-запрос действительно сложный, и я думаю, что они должны быть лучшим способом сделать это, не выполняя запрос дважды.

4b9b3361

Ответ 1

К счастью, с MySQL 4.0.0 вы можете использовать параметр SQL_CALC_FOUND_ROWS в своем запросе, который подскажет MySQL подсчитать общее количество строк без учета предложения LIMIT. Вам все равно нужно выполнить второй запрос, чтобы получить количество строк, но это простой запрос, а не такой сложный, как ваш запрос, который извлекал данные. Использование довольно простое. В главном запросе вам нужно добавить параметр SQL_CALC_FOUND_ROWS сразу после SELECT, а во втором запросе вам нужно использовать функцию FOUND_ROWS(), чтобы получить общее количество строк. Запросы будут выглядеть так:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();

Единственное ограничение заключается в том, что вы должны вызывать второй запрос сразу после первого, потому что SQL_CALC_FOUND_ROWS не сохраняет число строк в любом месте. Хотя это решение также требует двух запросов намного быстрее, так как вы выполняете основной запрос только один раз. Вы можете больше узнать о SQL_CALC_FOUND_ROWS и FOUND_ROWS() в документах MySQL.

EDIT: Следует отметить, что в большинстве случаев выполнение запроса дважды выполняется быстрее, чем SQL_CALC_FOUND_ROWS. см. здесь