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]

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 !!!


GROUP_CONCAT fait la magie! cheers
AliBZ

@RolandoMySQLDBA "... et ici ma montre se termine": P, je cherchais cela depuis longtemps. Merci
PHP Mentor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.