Ottieni il risultato dell'unione di più tabelle come una riga


8

Ho queste 2 tabelle:

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

Se voglio ottenere tutte le informazioni su un utente usando il suo userid, posso semplicemente unirmi a loro usando questo:

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

che per USER_ID = 1 restituisce:

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

Quello di cui ho bisogno è in realtà 1 riga unica anziché più righe. È in qualche modo possibile ottenere qualcosa del genere? (Non ho visto qualcosa per farlo ma non ne sono sicuro)

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

Risposte:


8

È possibile utilizzare la funzione GROUP_CONCAT

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;

o con la tua query originale

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;

Provaci !!!


GROUP_CONCAT fa la magia! salute
AliBZ

@RolandoMySQLDBA "... e qui finisce il mio orologio": P, lo cercavo da molto tempo. Grazie
Mentore PHP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.