Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 29. 11. 2011, 10:05:17 · Upravil/a: Medvídek
Zdravím,
narazil sem na problem, jak řešit vyhledávání v SUBSELECTU. Mam tabulky s vyúčtováním, konektorama, zákazníkama a potřeboval bych na to aplikovat různé filtry. Základní přehled vypadá takto: SELECT services.*, connectors.sim, SUBSTR(connectors.sim, -12) AS telSim, (SELECT COUNT(celkem) FROM podVyuct_10_2011 WHERE (cislo = telSim)) AS celkem FROM services LEFT JOIN connectors ON services.connectorID = connectors.id WHERE services.skupina = 1111 Vše je 1:1 až na to vyúčtování, kde je pro každé tel. číslo N záznamů. A já bych potřeboval zjistit (filtrovat) podle (catka > zadana hodnota, pocet sms > zadana hodnota atd), což mi v tom subselectu nějak nejde. Jak toto nejlépe řešit? Napadlo mě si to JOINout SELECT services.*, connectors.sim, SUBSTR(connectors.sim, -12) AS telSim, (SELECT COUNT(celkem) FROM podVyuct_10_2011 WHERE (cislo = telSim)) AS celkem FROM services LEFT JOIN connectors ON services.connectorID = connectors.id LEFT JOIN podVyuct_10_2011 ON podVyuct_10_2011.cislo = telSim WHERE services.skupina = 1111 což samozřejmě nejde, a pokud to udělám takto, tak je to vražda pro DB. ON podVyuct_10_2011.cislo = SUBSTR(connectors.sim, -12) |
||
Kajman_ Profil * |
#2 · Zasláno: 29. 11. 2011, 10:16:18
Seskupit záznamy můžete díky group by, na součet částek či sms můžete pak použít agregační funkci sum(). Omezit výpis podle výsledku sum můžete díky podmínce v having.
|
||
Medvídek Profil |
#3 · Zasláno: 29. 11. 2011, 10:38:53 · Upravil/a: Medvídek
Kajman:
Zkusil sem to tedy udělat takto: SELECT services.*, connectors.sim, SUBSTR(connectors.sim, -12) AS telSim, (SELECT SUM(celkem) FROM podVyuct_10_2011 WHERE cislo = telSim GROUP BY cislo HAVING SUM(celkem) > 150 ) AS celkem FROM services LEFT JOIN connectors ON services.connectorID = connectors.id WHERE services.skupina = 1111 A v php vynechám záznamy, který nemají hodnotu ve sloupci celkem. Nebo vlastně můžu opět seskupit: SELECT services.*, connectors.sim, SUBSTR(connectors.sim, -12) AS telSim, (SELECT SUM(celkem) FROM podVyuct_10_2011 WHERE cislo = telSim GROUP BY cislo HAVING SUM(celkem) > 150 ) AS celkem FROM services LEFT JOIN connectors ON services.connectorID = connectors.id WHERE services.skupina = 1111 GROUP BY celkem EDIT: To je kravina co sem udelal :) Takže takto: SELECT services.*, connectors.sim, SUBSTR(connectors.sim, -12) AS telSim, (SELECT SUM(celkem) FROM podVyuct_10_2011 WHERE cislo = telSim) AS celkem FROM services LEFT JOIN connectors ON services.connectorID = connectors.id WHERE services.skupina = 1111 GROUP BY celkem |
||
Časová prodleva: 12 let
|
0