Ich arbeite mit einer MySQL-Datenbank, aber ich stehe vor einem Problem. Ich habe eine Liste von Benutzern, die ungefähr so aussieht.Kombinieren von Spalten in einzelne Spalten mit einer Brücke
Users
+----+------+
| ID | Name |
+----+------+
| 1 | Jim |
| 2 | Cal |
| 3 | Rob |
| 4 | John |
| 5 | Paul |
+----+------+
Jetzt habe ich zwei weitere Tische,
Teams Role
+----+----------+ +---+------+
| ID | NameTeam | |ID | Role |
+----+----------+ +---+------+
| 1 | Team1 | | 1 |Leader|
| 2 | Team2 | | 2 |Member|
| 3 | Team3 | | 3 |Role3 |
| 4 | Team4 | | 4 |Role4 |
| 5 | Team5 | | 5 |Role5 |
+----+----------+ +---+------+
Bitte nicht, dass alle IDs sind Primärschlüssel.
Schließlich gibt es eine Tabelle, die als Brücke für die obigen Tabellen dient.
Alle diese drei Spalten sind Fremdschlüssel, die mit den Primärschlüsseln in den drei Tabellen Benutzer, Teams und Rolle verknüpft sind.
Was ich möchte ist eine Liste aller Benutzer und in einer Spalte die Informationen der Teams, denen sie angehören, zusammen mit der Rolle, die sie in diesem Team haben. Ich dachte mir, dass ich dies durch eine Linksbindung tun könnte, aber es ist möglich, dass ein Benutzer mit mehreren Teams verbunden wird und die Zeile dann dupliziert wird.
Meine Anfrage bisher:
select * from Users
LEFT OUTER JOIN Bridge
ON Bridge.UserID = Users.UserID;
die in Duplikaten führt wie:
Result
+----+------+---------+--------+--------+
| ID | Name | ID_team | ID_user| ID_role|
+----+------+---------+--------+--------+
| 1 | Jim | 1 | 1 | 1 | << Twice Jim here
| 1 | Jim | 2 | 1 | 3 | <<
| 2 | Cal | 1 | 2 | 2 |
| 3 | Rob | 1 | 3 | 3 |
| 4 | John | 2 | 4 | 1 |
| 5 | Paul | 2 | 5 | 2 |
+----+------+---------+--------+--------+
Desired result
+----+------+----------------------------+
| ID | Name | Team and role |
+----+------+----------------------------+
| 1 | Jim | Team1: Leader,Team2:role3 | <<Nice sum up.
| 2 | Cal | Team1: Member |
| 3 | Rob | Team1: Role3 |
| 4 | John | Team2: Leader |
| 5 | Paul | Team2: Member |
+----+------+----------------------------+
Ist so etwas überhaupt möglich mit einer einzigen Abfrage? Wenn nicht, könnte ich immer etwas ähnliches mit php erstellen, aber es wäre wirklich nett, wenn es eine einzige Abfrage wäre.
Also meine Frage ist, wie kann ich das gewünschte Ergebnis bekommen?
Sicherlich müssen Sie Bridge-Tabelle in 2 Bridge-Tabellen teilen 1) Benutzer ist im Team und 2) Benutzer hat Rolle – RiggsFolly