Obtenga el resultado de unir varias tablas como una fila

8

Tengo estas 2 tablas:

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

Si quiero obtener toda la información sobre un usuario que usa su ID de usuario, simplemente puedo unirme a ellos usando esto:

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

que para USER_ID = 1 devuelve:

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

Lo que necesito es en realidad 1 fila única en lugar de varias filas. ¿Es posible obtener algo como esto? (No he visto algo para hacerlo, pero no estoy seguro)

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

Respuestas:

8

Puede usar la función 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 tu consulta original

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;

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
¡GROUP_CONCAT hace la magia! aplausos
AliBZ
@RolandoMySQLDBA "... y aquí termina mi reloj": P, estuve buscando esto desde hace mucho tiempo. Gracias
Mentor PHP el