Oznámení
DibiDataSource – zbytečný dotaz navíc?
před 9 lety
- Ondřej Mirtes
- Člen | 1539
Ahoj,
implementuji stránkování pomocí DibiDataSource a všiml jsem si jedné
nepříjemné věci – dibi namísto dvou nutných dotazů (dotaz na celkový
počet položek + dotaz na položky na dané stránce – s LIMIT a OFFSET)
volá tři!
Vypadají takto:
SELECT COUNT(*) FROM (můj poddotaz) t;
SELECT COUNT(*) FROM (SELECT * FROM (můj poddotaz) t LIMIT 5) AS t;
SELECT * FROM (můj poddotaz) t LIMIT 5;
Význam toho prostředního dotazu skutečně nechápu.
Druhý a třetí dotaz je spuštěn zavoláním metody
fetchAll()
nad dataSourcem.
V PHP volám metody v tomto pořadí:
$data->getTotalCount();
$data->applyLimit($paginator->itemsPerPage, $paginator->offset);
$data->fetchAll();
Pokud odeberu volání applyLimit, tak se zavolají jen dva dotazy dle očekávání (přičemž ten druhý samozřejmě neobsahuje LIMIT klauzuli, kterou tam chci přidat zavoláním applyLimit, což ale přidá zavolání zbytečného SQL dotazu, jehož výsledek vždy bude vracet počet položek na stránce).
před 9 lety
- David Grudl
- Nette Core | 6806
Nedaří se mi to nasimulovat. Nemáš tam někde
count($data)
?