MySQL : Consolidation de plusieurs lignes dans une chaîne séparée par des virgules
Dans MySQL, la fonction GROUP_CONCAT peut être utilisée pour fusionner plusieurs lignes dans un chaîne unique séparée par des virgules. Cette technique est particulièrement utile lors de la combinaison de données de tableaux avec des relations un-à-plusieurs.
Énoncé du problème
Considérez les tableaux suivants :
| DISH | |---|---| | dish_id | dish_name | | 1 | dish_1 | | 2 | dish_2 | | 3 | dish_3 | | 4 | dish_4 | | DISH_HAS_DISHES | |---|---| | meal_id | dish_id | | 1 | 2 | | 1 | 3 | | 1 | 4 |
Le but est de transformer ces données dans un format où chaque repas_id est associé à une liste de plats_ids et de noms de plats séparés par des virgules. Le résultat souhaité est :
| meal_id | dish_ids | dish_names | |---|---|---| | 1 | 2,3,4 | dish_2, dish_3, dish_4 |
Solution
La fonction GROUP_CONCAT fournit un moyen efficace pour réaliser cette consolidation. La requête suivante rejoint les tables DISH et DISH_HAS_DISHES, regroupe les résultats par Meal_id et utilise la fonction GROUP_CONCAT pour concaténer les valeurs Dish_id et Dish_name pour chaque groupe :
SELECT m.meal_id, GROUP_CONCAT(dish_id) AS dish_ids, GROUP_CONCAT(dish_name) AS dish_names FROM DISH_HAS_DISHES m JOIN DISH d ON (m.dish_id = d.dish_id) GROUP BY meal_id;
Résultat
L'exécution de cette requête produira le résultat souhaité sortie :
| meal_id | dish_ids | dish_names | |---|---|---| | 1 | 2,3,4 | dish_2, dish_3, dish_4 |
Conclusion
La fonction GROUP_CONCAT fournit un outil puissant pour combiner plusieurs lignes en une seule chaîne. Cette technique est particulièrement utile dans les scénarios où vous devez consolider les données de tables liées, comme dans le cas de relations un-à-plusieurs.
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!