Obtenez le résultat de la jonction de plusieurs tables en une seule ligne

8

J'ai ces 2 tableaux:

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 je veux obtenir toutes les informations sur un utilisateur en utilisant son ID utilisateur, je peux simplement les rejoindre en utilisant ceci:

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

qui pour USER_ID = 1 renvoie:

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

Ce dont j'ai besoin est en fait 1 ligne unique au lieu de plusieurs lignes. Est-il possible d'obtenir quelque chose comme ça? (Je n'ai pas vu quelque chose pour le faire mais je ne suis pas sûr)

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

Réponses:

8

Vous pouvez utiliser la fonction 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;

ou avec votre requête d'origine

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;

Essaie !!!

RolandoMySQLDBA
la source
GROUP_CONCAT fait la magie! cheers
AliBZ
@RolandoMySQLDBA "... et ici ma montre se termine": P, je cherchais cela depuis longtemps. Merci
PHP Mentor