Počet celkových výsledků z dotazu

V následujícím příkladu je uvedeno, jak je možné získat celkový počat výsledků z dotazu z databáze. Uvedený způsob je vhodný například v situaci, kdy vypisujete uživateli omezený počet výsledků a chceme mu nabídnout stránkování s možností volby dané stránky. Vynechme situaci, kdy potřebujeme pouze odkaz na stránku předchozí a následující. Zjednodušeně je tento příklad pro situace kdy v databázi používáte příkaz LIMIT a OFFSET.

Situace je problémová především z pohledu zobrazení celkového počtu stránek, kdy přesně nevíme kolik správných výsledků existuje a kolik stránek je tedy potřeba uživateli nabídnout. Například 4/7. Můžeme například přenášet veškerá data a zobrazovat jen část, což je ve většině případů zbytečné a zpomaluje samotný běh stránek. Můžete použít také dva dotazy, jeden, který spočítá celkový počet výsledků a druhý jen na zobrazení konkrétního počtu stránek. Příkladů naleznete mnoho.

  Jednoduchým řešením je požít následující konstrukci pro SQL dotaz a to takto:

SELECT SQL_CALC_FOUND_ROWS * FROM ……. Zadaná konstrukce nám zajistí, že použitím následného SQL dotazu SELECT FOUND_ROWS() nám vrátí celkový počet řádků, které splňují kritéria původního dotaz.

V tomto bodě je potřeba se také podívat se na celkové zatížení při použití takovéto konstrukce na běh databáze. Na časovou náročnost se v tomto případě v běžné praxi nemusí brát zřetel. Především je potřeba si uvědomit, že dalších příliš elegantních možností moc nemáme a běžně vypisovaná data třídíme, sčítáme,  …. takže databáze provádí další mnohem náročnější operace nad celou tabulkou, která zaberou více času než samotné filtrování. Jsou případy, kdy je toto náročnější než provést dotazy dva.