2010-04-26 4 views
3

J'essaye de créer une instruction MySQL SELECT qui sélectionnera un groupe de lignes d'une table et regroupera les résultats par l'identifiant de la ligne (plusieurs lignes auront le même identifiant).Instruction MySQL SELECT qui regroupe les résultats par identifiant?

Voici un exemple de ce que j'essaie de faire. Disons que je le tableau suivant:

id  |  name 
1  |  Art 
1  |  Arnold 
1  |  Anatoly 
2  |  Beatrice 
2  |  Bertha 
2  |  Betty 
3  |  Constantine 
3  |  Cramer 

Je voudrais avoir MySQL retourner les données groupées par identifiant comme ceci:

[1] => Art, Arnold, Anatoly 
[2] => Beatrice, Bertha, Betty 
[3] => Constantine, Cramer 

Je sais que je pouvais faire un simple SQL select, puis boucle sur le résultat en PHP, mais je voudrais laisser MySQL gérer le regroupement si possible.

Répondre

4

Une solution possible consiste à utiliser la fonction GROUP_CONCAT(expr) de MySQL.

SELECT 
    GROUP_CONCAT(name) 
FROM 
    foo 
GROUP BY 
    id 

Mais gardez à l'esprit:

Le résultat est tronqué à la longueur maximale est donnée par la variable système group_concat_max_len, qui a une valeur par défaut de 1024.
+0

que 1024 valeur est revenu me hanter plusieurs fois. –

+0

@MikeB, ça me hante tous les jours: je suis né le 10/24. : P –

+0

merci pour la réponse @VolkerK, mais je vais certainement rencontrer le problème de longueur max depuis que j'ai affaire à des milliers de lignes =) – Rohan

Questions connexes