Wedgy: Suche Query!

Habe eine MySQL-Tabelle "Kunden", eine "Kundenlisten" und eine weitere "Listenmitglieder". Letztere hat nur drei Felder, eine ID, die Kundennummer und die Listennummer, um einen Kunden mit einer (oder mehreren) Liste zu verknüpfen.

Ich möchte jetzt eine Liste haben, in der in jeder Zeile der Name der Kundenliste steht und wieviele Mitglieder sie hat. Ich komm nicht drauf wie das passende SQL-Query aussieht...

Sinngemäß etwa so:
SELECT Kundenlisten.Name AS Name, Anzahl_Mitglieder AS Members FROM Listenmitglieder LEFT JOIN Kundenlisten ON Listenmitglieder.Liste = Kundenlisten.Id;

Nur wie krieg ich da nun die Anzahl_Mitglieder rein?

  1. Hej,

    Sinngemäß etwa so:
    SELECT Kundenlisten.Name AS Name, Anzahl_Mitglieder AS Members FROM Listenmitglieder LEFT JOIN Kundenlisten ON Listenmitglieder.Liste = Kundenlisten.Id;

    Das sieht doch shon gut aus: Für Anzahl_Mitglieder setzt du jetzt noch ein count ( Kundenliste.Id ) und hängst an das Ende des Query ein GROUP BY Kundenlisten.Name.

    Denn genau dafür ist [link:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html@title=GROUP BY] gemacht.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
    1. yo,

      Das sieht doch shon gut aus: Für Anzahl_Mitglieder setzt du jetzt noch ein count ( Kundenliste.Id ) und hängst an das Ende des Query ein GROUP BY Kundenlisten.Name.

      nicht ganz, zum einen macht der LEFT JOIN ausgehend von der tabelle listenmitglieder keinen sinn, da es immer eine entsprechenden eintrag in der tabelle kundenlisten gebe sollte, es sei den es gibt "verweiste" datensätze in der listenmitglieder tabelle.

      zum anderen erfäßt man so nicht datensätze in der kundenlisten tabelle, wenn es keine mitglieder gibt. der LEFT JOIN muss also genau umgekehrt geschrieben werden.

      und drittens muss dann eine spalte aus der tabelle Listenmitglieder in den COUNT und nicht der tabelle Kundenliste.

      SELECT k.Name, COUNT(l.liste) AS Members
      FROM Kundenlisten  k
      LEFT JOIN Listenmitglieder l ON (l.Liste = k.Id);

      Ilja

      1. yo,

        habe natürlichd en GROUP BY vergesen.....

        SELECT k.Name, COUNT(l.liste) AS Members
        FROM Kundenlisten  k
        LEFT JOIN Listenmitglieder l ON (l.Liste = k.Id);
        GROUP BY k.Name

        Ilja