Suche Query!
Wedgy
- datenbank
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?
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
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 einGROUP 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
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