Špatný dotaz při COUNT() v NDBT
- Kamil Valenta
- Člen | 820
Každá tabulka nutně nemusí ID obsahovat. Ale je pravda, že by se ten count() mohl vygenerovat podle prvního sloupce tabulky, ve většině případů to ID bude…
- Polki
- Člen | 553
kamil_v napsal(a):
Každá tabulka nutně nemusí ID obsahovat. Ale je pravda, že by se ten count() mohl vygenerovat podle prvního sloupce tabulky, ve většině případů to ID bude…
To chápu, že ne každá má sloupec id, ale při prvním průchodu si stejně Nette zjišťuje, jaké sloupečky tam jsou a případně vrací pouze PrimaryKey. Tu většina tabulek má. Pokud ne, tak by se mohl jak píšeš dotázat na první sloupec, nebo prostě udělat jen
SELECT COUNT(*) FROM `test`
to by mělo stejný efekt a není potřeba zjišťovat jaký sloupec se tam má dosadit a hlavně v případě, že zapomene programátor sloupec doplnit, tak se nemusí divit, že na 20 tisících řádcích mu trvá dotaz na počet řádků nějak dlouho a půl dne hledat, kde udělal chybu.
- David Matějka
- Moderator | 6445
je mozna trochu nestastne, ze to nejsou spise dve metody. ale to, jak se to
chova bez parametru je zamerne – kdyz chces zjistit, jestli ti dotaz vratil
nejake zaznamy. selection dokonce implementuje Countable interface, takze muzes
pouzit treba if(count($rows)) {...}
- Polki
- Člen | 553
@DavidMatějka To vím. běžně dávám selection do foreache apod. Ale když zavolám count() tak spíš, než selection s řádky, nebo něco podobného očekávám pouze číslo. A v tomto případě moc nerozumím tomu, proč bych měl zkoušet count($rows), když vím, že jsem do $rows uložil $selection->count();, což by mělo vrátit číslo.