За щастие от 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 документи.
РЕДАКТИРАНЕ: Трябва да отбележите, че в повечето случаи двукратното изпълнение на заявката всъщност е по-бързо от SQL_CALC_FOUND_ROWS
. вижте тук
РЕДАКТИРАНЕ 2019:
Модификаторът на заявка SQL_CALC_FOUND_ROWS и съпътстващата функция FOUND_ROWS() са отхвърлени от MySQL 8.0.17 и ще бъдат премахнати в бъдеща версия на MySQL.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Препоръчително е да използвате COUNT
вместо това
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;