Maison  >  Article  >  base de données  >  Comment combiner plusieurs lignes en une seule ligne séparée par des virgules dans MySQL ?

Comment combiner plusieurs lignes en une seule ligne séparée par des virgules dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 12:21:02676parcourir

How to Combine Multiple Rows into a Single Comma-Separated Row in MySQL?

MySQL : Conversion de plusieurs lignes en une seule ligne séparée par des virgules

Dans une base de données MySQL, vous pouvez rencontrer une situation dans laquelle vous souhaitez condenser plusieurs lignes en une seule ligne, avec des colonnes spécifiques représentées sous forme de valeurs séparées par des virgules. Ceci peut être réalisé en utilisant la fonction GROUP_CONCAT, comme démontré dans l'exemple de scénario suivant.

Exemple de scénario :

Considérez deux tables : DISH et DISH_HAS_DISHES, où DISH contient tous les plats disponibles, et DISH_HAS_DISHES définit une relation un-à-plusieurs entre les DISH. La table DISH a la structure suivante :

DISH:
dish_id   dish_name
1         dish_1
2         dish_2
3         dish_3
4         dish_4

Alors que la table DISH_HAS_DISHES ressemble à ceci :

DISH_HAS_DISHES:
meal_id   dish_id
1         2
1         3
1         4

Objectif :

Notre objectif consiste à transformer les données dans un format dans lequel chaque repas a une ligne correspondante, répertoriant ses identifiants et noms de plats sous forme de valeurs séparées 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 :

Pour y parvenir, nous utiliserons la fonction GROUP_CONCAT, ainsi que quelques opérations JOIN simples :

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

Dans cette requête :

  • Nous commençons par joindre la table DISH_HAS_DISHES (m) avec la table DISH (d) sur la colonne Dish_id.
  • Dans l'instruction SELECT , nous utilisons GROUP_CONCAT pour fusionner plusieurs valeurs des colonnes Dish_id et Dish_name.
  • Enfin, nous regroupons les résultats par repas_id pour obtenir une seule ligne pour chaque repas.

En exécutant Avec cette requête, nous obtiendrons le résultat souhaité, où chaque ligne représente un repas, ses identifiants de plat et leurs noms de plat correspondants, tous représentés sous forme de valeurs séparées par des virgules. Cette technique est particulièrement utile lorsque vous travaillez avec des données tabulaires et consolidez des informations sur plusieurs lignes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn