Johnny B.: mySQL-Query mit einer Abfrage mehr - Subselect?

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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