Naštěstí od MySQL 4.0.0 můžete použít SQL_CALC_FOUND_ROWS
možnost ve vašem dotazu, která řekne MySQL, aby spočítala celkový počet řádků bez ohledu na LIMIT
doložka. Stále musíte provést druhý dotaz, abyste získali počet řádků, ale je to jednoduchý dotaz a není tak složitý jako váš dotaz, který načetl data. Použití je docela jednoduché. V hlavním dotazu musíte přidat SQL_CALC_FOUND_ROWS
možnost hned za SELECT
a ve druhém dotazu musíte použít FOUND_ROWS()
funkce pro získání celkového počtu řádků. Dotazy by vypadaly takto:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Jediným omezením je, že musíte volat druhý dotaz ihned po prvním, protože SQL_CALC_FOUND_ROWS
nikde neukládá počet řádků. Přestože toto řešení také vyžaduje dva dotazy, je mnohem rychlejší, protože hlavní dotaz provedete pouze jednou. Můžete si přečíst více o SQL_CALC_FOUND_ROWS a FOUND_ROWS()
v dokumentech MySQL.
UPRAVIT: Měli byste si uvědomit, že ve většině případů je dvojité spuštění dotazu ve skutečnosti rychlejší než SQL_CALC_FOUND_ROWS
. viz zde
ÚPRAVY 2019:
Modifikátor dotazu SQL_CALC_FOUND_ROWS a doprovodná funkce FOUND_ROWS() jsou od verze MySQL 8.0.17 zastaralé a v budoucí verzi MySQL budou odstraněny.
https://dev.mysql.com /doc/refman/8.0/cs/information-functions.html#function_found-rows
Doporučuje se použít COUNT
místo
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;