Ich habe eine Gruppe von Benutzern und Gruppen. Benutzer können Teil einer oder mehrerer Gruppen sein, und Gruppen können einen oder mehrere Benutzer haben. Also habe ich die Join-Tabelle von user_groups
.Erstellen einer Zuordnung von Benutzern zu Gruppen und Abrufen der Gruppe basierend auf Benutzerkombinationen
Gibt es eine Möglichkeit, den Namen der Gruppe herauszufinden, basierend auf einer genauen Kombination von Benutzern? Ich bin nicht positiv, wenn die Struktur, die ich dafür habe korrekt ausgeführt werden würde, dies, aber hier sind zwei Beispiele:
Der Benutzer mit ID 1 (Jeff) ist Teil von zwei Gruppen, wie durch die user_groups
Tabelle. Für die eine Gruppe mit der ID 2
ist er das einzige Mitglied. Und für die andere Gruppe von ID 4
ist er einer von zwei Mitgliedern.
Ich möchte in der Lage sein, eine Abfrage zu erstellen, wo, wenn ich nur seine ID habe, ich weiß, dass der Gruppenname GP-B ist, denn das ist die Zuordnung. Wenn ich die Benutzer-IDs 1
und 4
habe, wird dies der Gruppe 4
zugeordnet, also würde ich wissen, dass der Gruppenname GP-D ist.
SELECT id, name FROM users;
1, Jeff
2, John
3, Mary
4, Jen
5, Mike
SELECT id, name FROM groups;
1, GP-A
2, GP-B
3, GP-C
4, GP-D
SELECT user_id, group_id FROM user_groups;
1, 2
1, 4
2, 3
4, 1
4, 4
Die beste Abfrage, die ich bisher mit so kommen könnte, ist:
SELECT groups.name
FROM user_groups
LEFT JOIN groups
ON groups.id = user_groups.group_id
WHERE user_id IN (1,4)
GROUP BY group_id
HAVING COUNT(*) = 2;
Und das schien zu funktionieren. Allerdings, wenn ich nur die einzelnen Benutzer tat:
SELECT groups.name
FROM user_groups
LEFT JOIN groups
ON groups.id = user_groups.group_id
WHERE user_id IN (1)
GROUP BY group_id
HAVING COUNT(*) = 1;
Es endet beide Gruppen zieht er ein Teil ist von, so etwas ist nicht richtig über meine Frage.
Nicht die Antwort, aber hier ist eine SQL-Geige. http://sqlfiddle.com/#!9/58596/1 – Jeroen