Erhalten Sie das Ergebnis der Verknüpfung mehrerer Tabellen als eine Zeile

8

Ich habe diese 2 Tabellen:

table1:

id | name
---------
1  | john
2  | jack

table2:

id | profile_id | institution
-----------------------------
1  | 1          | SFU
2  | 1          | UBC
3  | 2          | BU
4  | 2          | USC
5  | 2          | SFU

Wenn ich alle Informationen über einen Benutzer mit seiner Benutzer-ID erhalten möchte, kann ich sie einfach folgendermaßen verbinden:

select a.id, a.name, b.institution from table1 a, table2 b
where a.id = USER_ID and a.id = b.profile_id

was für USER_ID = 1 zurückgibt:

id | name | institution
-----------------------
1  | john | SFU
1  | john | UBC

Was ich brauche, ist tatsächlich 1 eindeutige Zeile anstelle mehrerer Zeilen. Ist es in irgendeiner Weise möglich, so etwas zu bekommen? (Ich habe nichts gesehen, bin mir aber nicht sicher)

id | name | institution
-----------------------
1  | john | [SFU, UBC]
AliBZ
quelle

Antworten:

8

Sie können die Funktion GROUP_CONCAT verwenden

SELECT a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
FROM table1 a INNER JOIN table2 b
ON a.id = b.profile_id
WHERE a.id = USER_ID
GROUP BY a.id, a.name;

oder mit Ihrer ursprünglichen Anfrage

select a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
from table1 a, table2 b where a.id = USER_ID and a.id = b.profile_id
group by a.id, a.name;

Versuche es !!!

RolandoMySQLDBA
quelle
GROUP_CONCAT macht die Magie! prost
AliBZ
@RolandoMySQLDBA "... und hier endet meine Uhr": P, das habe ich schon lange gesucht. Danke
PHP Mentor