tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

->fetchAll($offset, $limit) VS ->limit($limit)->offset($offset)->fetchAll()

před 9 lety

bene
Člen | 83

Zdravím,

při použití $fluent->fetchAll(0, 10) MySQL vrací např. 60 řádků, ale dibi vytáhne jen 10.

Při použití $fluent->limit(10)->offset(0)->fetchAll() vrací MySQL 10 řádků a dibi vytáhne 10 řádků.

Z výkonového a paměťového hlediska je dle mě výhodnější druhý zápis.

Otázka zní: Kdy je žádoucí chování prvního příkladu? Napadá mě jen, že bych si vytáhl oněch 60 řádků a pak nad resultsetem např. 3× zavolal fetchAll a vytahoval si 5 řádků z jiným offsetem a tyto výsledky k něčemu použil. Tento příklad jsem si ale musel vymyslet, reálně si nevzpomínám, že bych na něj narazil.

Z toho vyplývá druhá otázka: Je k něčemu první zápis? Já osobně bych uvítal přidání třetího parametru u fetchAll, který by mi určoval chování získávání resultsetu (defaultně nastavený na chování druhého příkladu).
Možná jsem ale úplně mimo a něco mi uniká nebo paměťová a výkonová náročnost je zanedbatelná (mě z několika refresh vysla asi 2× vetší, zrovna u těch 60 záznamů…ale stále šlo o jednotky milisekund, pam. náročnost jsem netestoval).

Budu rád, pokud mi někdo tuto problematiku objasní :-).

před 9 lety

David Grudl
Nette Core | 6806

Už si nepamatuju, k čemu to bylo, tak jsem to dal pryč.