tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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) ?