Johnny B.: Subselects sind hier überflüssig

Beitrag lesen

Hallo Vinzenz,

5. Schritt: füge die Abfrage der Tabelle statistik ein
            schreibe dabei wirres Zeug, obschon es das richtige Ergebnis bringt

SELECT  u.akid aktion_id,  
        u.beschreibung,  
        u.anzahl  
FROM (  
    SELECT  aktion_id akid,  
            beschreibung,  
            (   SELECT COUNT( id )  
                FROM statistik  
                WHERE $datum_passt  
                AND typ = 'C'  
                AND aktion_id = akid  
            ) anzahl  
    FROM (  
        SELECT  
            aktionen.id aktion_id,                  -- Aliasnamen für Spalten sind nur  
            zeitungen.name beschreibung             -- im ersten Select-Statement drin  
        FROM  
            aktionen  
        INNER JOIN  
            zeitungen  
        ON  
            aktionen.typ_id = zeitungen.id  
        WHERE  
            aktionen.typ = 'zeitungen'  
  
        UNION  
  
        SELECT  
            aktionen.id,  
            anzeigen.domain  
        FROM  
            aktionen  
        INNER JOIN  
            anzeigen  
        ON  
            aktionen.typ_id = anzeigen.id  
        WHERE  
            aktionen.typ = 'anzeigen'  
  
        UNION  
  
        SELECT  
            aktionen.id,  
            mailings.beschreibung  
        FROM  
            aktionen  
        INNER JOIN  
            mailings  
        ON  
            aktionen.typ_id = mailings.id  
        WHERE  
            aktionen.typ = mailings  
    ) t  
) u  
WHERE u.anzahl > 0  
GROUP BY aktion_id                              -- und zähle alle Vorkommen für eine Aktion zusammen  
ORDER BY anzahl DESC, aktion_id ASC             -- sortiert nach Anzahl die meisten und Aktion_id nach unten 

Es verdichtet sich der Eindruck, obiger Query ist nicht optimal. Ich habe die einschränkende Bedingung, daß nur solche Datensätze angezeigt werden sollen, bei denen die Anzahl der Vorkommen Typ = 'C' > 0 ist. Um den Wert 'anzahl' benutzen zu können, brauche ich ja wieder eine Unterabfrage. Und die zweite brauche ich, weil ich nicht weiß, wie ich anders die Tabelle 'statistik' ins Spiel bringen kann. Mit in den UNION rein geht nicht, als SUBSELECT geht's nicht, weil er zwei Werte liefert. Also habe ich statt verschachtelter SUBSELECTs nun verschachtelte Unterabfragen. Trickreiche Kiste...

Wieder verwirrte Grüße
JOhnnY