tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Distinct přes Fluent Interface

před 9 lety

Mesiah
Člen | 242

Dobrý den,

prosím Vás, jak přidat k dotazu DISTINCT přes Fluent Interface?

před 9 lety

phx
Člen | 652

Tusim ze select('DISTINCT') nebo select('DISTINCT [sloupecek]'). Mozna by to slo i $fluent->DISTINCT()->select(...)

před 9 lety

westrem
Člen | 398
dibi::select('DISTINCT [col1], [col2]')->from('[table]');

Osobne vzdy rad pomozem ak viem ako, no neda mi nespytat sa: vyskusal si si vobec aspon nejaku variantu kym si to postol na forum?

před 9 lety

Proki
Backer | 66

dibi::select(...)->setFlag('distinct')->from(...)

před 9 lety

rokerkony
Člen | 123

distinct se da vyresit i pres groupBy a je to mnohem databazovejsi reseni…

před 9 lety

Ondřej Brejla
Člen | 748

V čempak?

před 9 lety

rokerkony
Člen | 123

databazovejsi asi bylo spatne slovo… a neplati to pro vsechny pripady ale pri pouziti „velke“ databaze muze byt mnohdy rychlejsi…

nejvetsi rozdil je snad v tom ze groupBy eliminuje duplicity jako prvni a pak pracuje s daty, na rozdil od DISTINCT, ktery odstranuje duplicity pozdeji…

před 9 lety

Ondřej Brejla
Člen | 748

Principielně je group by k něčemu uplně jinému, k vytyčení skupin na kterých jsou následně aplikovány agregační funkce. To, že mohu udělat group by za všechny sloupce a výsledek je stejný jako s distinct je spíš vedlejší efekt. Nehledě na to, že je takový zápis nepohodlný (2× vypisuji seznam sloupců – jednou v klauzuli select a pak ještě jednou v group by), je pro budoucího čitatele kódu mnohem více wtf.

Pokud uvedu distinct, hned je jasné o co jde. Pokud vidí group by klauzuli, čekám agregace a pokud je nevidím, koukám jak sůva z nudlí:-) Takže ano, group by se dá použít, ale nepoužil bych ho:-)

před 9 lety

phx
Člen | 652

westrem napsal(a):
Osobne vzdy rad pomozem ak viem ako, no neda mi nespytat sa: vyskusal si si vobec aspon nejaku variantu kym si to postol na forum?

Ne ted, ale kdysi jo. A vim, ze jedna z nich je urcite OK. Takze lepsi nejaka odpoved nez zadna:)

před 9 lety

westrem
Člen | 398

phx napsal:

Jeminenko, to nebolo myslene na teba! Ale na Mesiah-a, pretoze den predtym postol podobny thread na pripad SUM a mam pocit, ze proste co akutne potrebuje tak postne na forum, pritom vyskusat si to, je len otazka dopisania ->test() na koniec fluent-u.

K tomu distinctu a group by. Ano niekedy sa to da nasimulovat, ale nemyslim si, ze je to spravny pristup. Ved pri distinct nevies urcit, ktora hodnota sa ti vrati v pripade duplicit, kdezto pri group by tam urcitu moc nad tym clovek ma.

Je vsak pravda, ze distinct znizuje vykonnost a nemal by sa pouzivat pokial nie je vyslovene nutny.

před 9 lety

phx
Člen | 652

westrem napsal(a):
Jeminenko, to nebolo myslene na teba!

V poho:)

DISTINCT by mel zajistit aby jsi ve vysledku nemel duplicitni radky. Takze by problem nemel byt v tom, ze nevis jaka hodnota tam bude.

Osobne si myslim, ze DISTINCT by mel byt vykonejsi nez nejaky slozity groupovani. Ale netestoval jsem to…

před 9 lety

westrem
Člen | 398

http://www.mysqlfaqs.net/…ork-in-MySQL

Islo mi skorej o to, ze niekto si moze mysliet, ze DISTINCT eliminuje duplicitu napr len pri stlpci kde je uvedeny. A potom ked fetchuje viac riadkov moze dostavat zle vysledky.