Ok hab nen bisschen rumprobiert, so dickere Querys sind nicht gerade mein Spezialgebiet, aber anscheinend funktionierts mit folgendem Query:
$sql2 = "SELECT b.name, a.groupid, b.id, a.uid, COUNT(c.groupid) as count
FROM prefix_groupx_user a
LEFT JOIN prefix_groupx b
ON a.groupid = b.id
LEFT JOIN prefix_groupx_user c
ON a.groupid = c.groupid
WHERE a.uid = ".$_SESSION['authid']."
GROUP BY c.groupid";
$query = db_query($sql2);
while($row = db_fetch_assoc($query)) {
echo $row['name']." : ".$row['count']."<br />";
}
$_SESSION['authid'] muss halt mit der UserID des Users ausgetauscht werden. Also mit den Standard Teams von ilch hat das ganze wunderbar funktioniert, habs mal schnell auf groupx umgeschrieben, ist halt ungetestet, habe nur kurz den query auf fehlerhafte Syntax getestet, war aber nicht der fall.
Musste halt mal testen
EDIT: Um das vielleicht mal zu erklären:
Zuerst werden alle Gruppenzuweisungen des Users ausgelesen (WHERE a.uid = ".$_SESSION...). Danach wird der Gruppenname geholt, indem man per LEFT JOIN in die Gruppen-Tabelle geht und sich nur die rausholt, deren id (b.id) gleich der Gruppen-ID, die bei der User-Zuweisung eingetragen ist, (a.groupid) ist. Zum Schluss müssen dann noch alle User der ausgelesenen Gruppen gezählt werden, dafür sucht man sich nochmal die Gruppen des Users raus, da beim ersten Auslesen ja nur die ausgelesen wurden, die die ID des gewählten Users entsprachen. Und diese zählt man dann mit COUNT(c.groupid) und nennt das z.b. count oder members um dann mit $row['count'] oder eben $row['members'] auf die Anzahl der Mitglieder zuzugreifen. GROUP BY c.groupid am Ende nicht vergessen, da das COUNT() sonst nicht funktioniert.
Ich weiß: Bahnhof. Kann man eher schlecht erklären
Vielleicht nochmal:
SELECT b.name, a.groupid, b.id, a.uid, COUNT(c.groupid) as count
FROM prefix_groupx_user a
WHERE a.uid = ".$_SESSION['authid']."
Der Teil holt grob gesagt erstmal alle GruppenIDs, in denen der User drin ist.
LEFT JOIN prefix_groupx b
ON a.groupid = b.id
Der Teil sorgt für den Gruppennamen, indem man alle Gruppen ausliest, deren ID der oben ausgelesenen entspricht.
LEFT JOIN prefix_groupx_user c
ON a.groupid = c.groupid
Der Teil sucht jetzt nochmal alle User in Abhängigkeit zur Gruppen-ID. Im ersten Teil hatten wir das ähnlich, aber da wurde in Abhängigkeit zum User gesucht, würde man das zählen, hätte man also nur den gesuchten User, da wäre die Mitgliederzahl also logischerweise immer nur 1. Hier suchen wir aber alle Einträge, die die besagte GruppenID beinhalten.
COUNT(c.groupid) as count
GROUP BY c.groupid
Das zählt im Grunde am Ende alle Mitglieder.
Falls du das ganze irgendwie noch sortieren möchtest, hängst zu am Ende noch ORDER BY b.name an, also
GROUP BY c.groupid ORDER BY b.name
b.name = Sortierung nach Gruppen-Name
b.id = Sortierung nach Gruppen-ID
count = Sortierung nach Mitgliederzahl
Als Beispiele :>
Zuletzt modifiziert von DaStIaC am 26.05.2011 - 20:16:24