mySQL-Query mit einer Abfrage mehr - Subselect?
Johnny B.
- datenbank
Hallo geehrtes Forum,
folgende Abfrage funktioniert, wie ich es mir wünsche. Sie liefert alle Aktionen, die Beschreibung und die Anzahl der "Treffer" im gegebenen Zeitraum:
SELECT aktion_id, -- hole aktion_id
(SELECT beschreibung -- und die dazugehörige Beschreibung
FROM aktionen
WHERE id = aktion_id
),
COUNT( aktion_id ) anzahl -- sowie die Anzahl
FROM statistik
WHERE $datumscheck -- im gegebenen Zeitraum
AND typ = '1' -- für einen bestimmten Typ
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
Nun wollte ich zusätzlich noch eine weitere Abfrage einbauen. Es sollen neben typ = 1 noch die Anzahl der Treffer typ = 2 ausgegeben werden. Ich hätte erwartet, daß dies mittels eines zweiten Subselects funktionieren würde. Der liefert mir allerdings als anzahl2 die Anzahl _aller_ aktion_id's zusammen. Wieso?
SELECT aktion_id, -- hole aktion_id
(SELECT beschreibung -- und die dazugehörige Beschreibung
FROM aktionen
WHERE id = aktion_id
),
COUNT( aktion_id ) anzahl, -- sowie die Anzahl
(SELECT COUNT(*) -- hole zusätzlich noch weiteren Typ
FROM statistik
WHERE aktion_id = aktion_id
AND typ = '2'
) anzahl2
FROM statistik
WHERE $datumscheck -- im gegebenen Zeitraum
AND typ = '1' -- für einen bestimmten Typ
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
Das Ergebnis soll sein
eine Tabelle aller Aktionen nebst Beschreibung,
für die im gegebenen Zeitraum
entweder mindestens einmal typ = 1
oder mindestens einmal typ = 2 in der Tabelle statistik vorhanden ist
mit Angabe der Anzahl typ = 1 und
Anzahl typ = 2
das Ganze sortiert nach Häufigkeit Anzahl typ = '1'
Ich nehme an, daß ich den Query sowieso umbauen muß, denn so wie er dort oben steht erwischt er ja die Aktionen nicht, die zwar keinen typ = 1, aber einen typ = 2 haben. Doch vorher würde ich gerne verstehen, warum der Subselect oben nicht funktioniert...
Besten Gruß
JOhnnY
Hi,
Nun wollte ich zusätzlich noch eine weitere Abfrage einbauen. Es sollen neben typ = 1 noch die Anzahl der Treffer typ = 2 ausgegeben werden. Ich hätte erwartet, daß dies mittels eines zweiten Subselects funktionieren würde. Der liefert mir allerdings als anzahl2 die Anzahl _aller_ aktion_id's zusammen. Wieso?
weil Deine einschränkende Bedingung ...
WHERE aktion_id = aktion_id
... ziemlich wenig einschränkt.
Cheatah
Hallo Cheatah,
weil Deine einschränkende Bedingung ...
WHERE aktion_id = aktion_id
... ziemlich wenig einschränkt.
umph.
Ein Alias auf aktion_id hat's gerichtet...
Danke!
JOhnnY