Comment utiliser GROUP_CONCAT dans un CONCAT dans MySQL
Dans certains scénarios, vous pouvez rencontrer le besoin de transformer les données stockées dans une table MySQL dans un format spécifique. Par exemple, supposons que vous ayez un tableau avec des données comme celle-ci :
id | Name | Value |
---|---|---|
1 | A | 4 |
1 | A | 5 |
1 | B | 8 |
2 | C | 9 |
Votre objectif est d'obtenir les résultats suivants :
id | Column |
---|---|
1 | A:4,5,B:8 |
2 | C:9 |
Pour réaliser cette transformation, vous devrez utilisez la fonction GROUP_CONCAT(). Cette fonction se distingue par sa capacité à concaténer les valeurs de plusieurs lignes, regroupées selon certains critères.
Pour commencer, vous devrez générer une sous-requête qui concatène les valeurs regroupées à la fois par identifiant et par nom. L'extrait de code suivant illustre cette étape :
select id, concat(`Name`, ':', group_concat(`Value` separator ',')) as Name from mytbl group by id, Name
La sous-requête résultante créera une nouvelle colonne appelée Nom qui comprend toutes les valeurs concaténées par des deux-points et des virgules, regroupées par identifiant et Nom.
| id | Name | | --- | ---- | | 1 | A:4,5 | | 1 | B:8 | | 2 | C:9 |
Enfin, appliquez à nouveau GROUP_CONCAT() à la requête la plus externe, cette fois en utilisant id comme critère de regroupement. Cette étape concatènera les valeurs Name de la sous-requête, séparées par des virgules :
select id, group_concat(`Name` separator ',') as `ColumnName` from ( select id, concat(`Name`, ':', group_concat(`Value` separator ',')) as Name from mytbl group by id, Name ) tbl group by id;
Le résultat sera exactement comme souhaité :
| id | Column | | --- | ----- | | 1 | A:4,5,B:8 |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!