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