Autor Zpráva
Medvídek
Profil
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 *
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
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
     

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0