Autor | Zpráva | ||
---|---|---|---|
Tori Profil |
#1 · Zasláno: 18. 9. 2014, 03:01:20
Pěkný večer. Z DB tahám data nějakých akcí, jejich účastníků a jestli zaplatili účastnický poplatek. Každá akce má 1-M účastníků, každý účastník může k jedné akci odeslat 0-M plateb (záloha, doplatek, ...), data se seskupují podle ID akce. Potřebuju podle určité logiky zobrazovat buď datum splatnosti nebo "OK" (podle toho, jestli všichni účastníci zaplatili), momentálně to řeším v aplikaci, ale bylo by potřeba podle toho i řadit (např. nejdřív všechny, kde je "OK", pak ty s datumem splatnosti vzestupně).
Jak by to šlo porovnávat ještě v dotaze? (je to view, takže žádná subquery, jedině připojit jiný view) |
||
Kajman Profil |
#2 · Zasláno: 18. 9. 2014, 08:26:11
Nejsem si jistý, jestli z view už padají zgroupovaná data a jestli se může view upravit. Tak jen obecně.
Počet účastníků, kteří provedli alespoň jednu platbu lze zjistit z count(distinct platby.id_ucastnika). Pokud zaplatili všichni účastníci přesnou částku, měla by se suma plateb rovnat počtu účastníků x cena akce pro jednoho. |
||
Tori Profil |
Přesné částky radši ani neřeším, tak je nějaké voodoo, jak se počítají. Stačí, že je neprázdné datum zaplacení a typ platby = "záloha" (jestli byly zaplacené zálohy a jestli byly zaplacené doplatky jsou dva různé sloupce ve výsledku).
View upravovat můžu, data jsou grupovaná, řazení musí být podle názvu sloupce (nemůžu použít podmínky v order by, SQL generuje grid). Konkrétně ta část view vypadá zhruba takhle: select ... count(if(podmínka1, 1, null)) as celkem_nezrusenych_ucastniku, count(if(podmínka1 ANd podmínka2, 1, null)) as celkem_ucastniku_se_zaplacenou_zalohou IF(celkem_nezrusenych_ucastniku = celkem_ucastniku_se_zaplacenou_zalohou, "OK", min(datumSplatnostiZalohy)) as zaloha Nakonec jsem na to přišla - počítání účastníků + seskupení podle ID akce hodím do samostatného view, a v hlavním view pak můžu dělat tohle porovnání. Vypadá to, že se to o moc nezpomalilo, výrazněji to zpomalují ta porovnávání v count+if, asi špatně nastavené indexy nebo co. |
||
Kajman Profil |
Tori:
„a potřebovala bych něco na způsob“ Šlo by to tak, že obalíš ten view (může to být též uloženo jako view). select ... celkem_nezrusenych_ucastniku, celkem_ucastniku_se_zaplacenou_zalohou, IF(celkem_nezrusenych_ucastniku = celkem_ucastniku_se_zaplacenou_zalohou, "OK", min(datumSplatnostiZalohy)) as zaloha from hlavni_view Případně to samé přímo v hlavním view select ... from (select puvodni ... ) t |
||
Časová prodleva: 10 let
|
0