2013-02-21 3 views
1

J'ai deux tables MySQLSQL pour regrouper plusieurs enregistrements d'une table jointe?

Parent 
id, name 
1, Parent 1 
2, Parent 2 

Children 
id, parent_id, name 
1,1, Child P1 1 
2,1, Child P1 2 
3,2, Child P2 1 
4,2, Child P2 2 
5,2, Child P2 3 

Je sais que le SQL pour récupérons les enregistrements des deux tables est

Select Parent.id, Parent.name, Children.id, Children.name 
from Parent 
left join Children 
    on Children.parent_id=Parent.id 

Cela renverra quelque chose comme

Parent.id Parent.name Children.id Children.Name 
1   Parent 1  1    Child P1 1 
1   Parent 1  2    Child P1 2 
2   Parent 2  3    Child P2 1 
2   Parent 2  4    Child P2 2 
2   Parent 2  5    Child P2 3 

Y at-il un SQL Requête en MySQL qui peut retourner quelque chose comme ça

Parent.id Parent.name Children_ids Children_Names 
1   Parent 1  1,2   Child P1 1,Child P1 2 
2   Parent 2  3,4,5   Child P2 1,Child P2 2,Child P2 3 

Merci d'avance.

Répondre

0

Dans MySQL, vous devez utiliser la fonction GROUP_CONCAT() qui concaténera les lignes multiples en une seule ligne. Étant donné que c'est une fonction d'agrégation, vous pouvez également utiliser une clause GROUP BY sur la requête:

select p.id, 
    p.name, 
    group_concat(c.id order by c.id) ChildrenIds, 
    group_concat(c.name order by c.id) ChildrenNames 
from parent p 
left join children c 
    on p.id = c.parent_id 
group by p.id, p.name 

Voir SQL Fiddle with Demo.

Le résultat est:

| ID |  NAME | CHILDRENIDS |     CHILDRENNAMES | 
------------------------------------------------------------------ 
| 1 | Parent 1 |   1,2 |   Child P1 1,Child P1 2 | 
| 2 | Parent 2 |  3,4,5 | Child P2 1,Child P2 2,Child P2 3 | 
Questions connexes