Autor | Zpráva | ||
---|---|---|---|
Lisoe Profil * |
#1 · Zasláno: 23. 9. 2019, 20:33:22
Zdravím,
přemýšlím jak nejlépe sestavit dotaz, kdy mám tabulku: event_registration id | event_id | tickets_adults | tickets_kids | payment_method_id | payment_status_id K tomu mám tabulky event_payment_method (id, name) a event_payment_status (id, name) A přemýšlím, jak nejkomplexněji sestavit dotaz (nebo sadu dotazů?) tak, abych dostal veškeré statistiky. Tzn. chci dostat statistiky počtu lístků (jak dospělí, tak i děti), pro jednotlivé platební metody a zároveň rozdělené na stav zaplacení. Jestli to řešit nějak takto, za pomocí CASE nebo je nějaké "elegantnější" řešení? Níže jen příklad jednoho CASE, kde bych přidal dalších x možností a vyřešit to sice jedním dotazem, ale pokud bych např. v budoucnosti přidal platební metodu nebo stav platby, tak se bude muset dál upravovat. SELECT Sum(tickets_adults) tickets_adults, Sum(tickets_kids) tickets_kids SUM(CASE When payment_status_id = 1 Then tickets_adults Else 0 End ) as ticket_adults_paid FROM event_registration WHERE event_id = 3 Díky moc za radu |
||
Kajman Profil |
#2 · Zasláno: 23. 9. 2019, 20:35:31
Nebojte se více dotazů, když budou dobře indexy, tak budou ve výsledku svižnější než sum(case) konstrukce.
|
||
Lisoe Profil * |
#3 · Zasláno: 23. 9. 2019, 20:41:21
Kajman:
Díky za radu, takže klidně nějak takto: select * from event_payment_method -- while (php) ---- select * from event_payment_status ------ while (php) -------- select sum(...) from event_registration where payment_method_id = EVENT_PAYMENT_METHOD_ID and event_payment_status = EVENT_PAYMENT_STATUS_ID Chápu to správně? Díky moc! |
||
Kajman Profil |
#4 · Zasláno: 23. 9. 2019, 21:07:48
Kdepak, dotazy ve while nedělejte. Proste konstantní počet dotazů podle počtu chtěných statistiky.
SELECT Sum(tickets_adults) tickets_adults, Sum(tickets_kids) tickets_kids FROM event_registration WHERE event_id = 3 SELECT payment_method_id, Sum(tickets_adults) tickets_adults, Sum(tickets_kids) tickets_kids FROM event_registration WHERE event_id = 3 GROUP BY payment_method_id SELECT payment_method_id, payment_status_id, Sum(tickets_adults) tickets_adults, Sum(tickets_kids) tickets_kids FROM event_registration WHERE event_id = 3 GROUP BY payment_method_id, payment_status_id Případně může použít with rollup, ale hůře se to zpracovává na straně aplikace. |
||
Lisoe Profil * |
#5 · Zasláno: 24. 9. 2019, 10:07:59
Kajman:
Kam jsem dal hlavu, úplně jsem zapomněl že to můžu jednoduše groupovat. Moc díky! |
||
Časová prodleva: 5 let
|
0