Combinaison de plusieurs lignes enfants en une seule ligne parent dans MySQL
Lorsque vous traitez des tables structurées contenant des données imbriquées, il peut être utile de fusionner plusieurs lignes enfants dans une seule ligne parent pour fournir une vue plus agrégée des données. Un scénario courant dans lequel cela est nécessaire est lorsque vous travaillez avec des systèmes de gestion des commandes, tels que celui présenté dans l'exemple donné.
Considérez deux tableaux : Ordered_Item et Ordered_Options. La table Ordered_Item représente les articles commandés, tandis que la table Ordered_Options inclut des détails ou des options supplémentaires associés à chaque article commandé. L'objectif est de générer une requête qui combine la colonne Item_Name de la table Ordered_Item avec les valeurs d'option correspondantes de la table Ordered_Options, regroupées dans un ordre spécifique et séparées par des virgules.
Une solution efficace consiste à utiliser GROUP_CONCAT de MySQL. fonction, qui concatène les valeurs de plusieurs lignes, regroupées par une colonne spécifiée. La requête ci-dessous obtient le résultat souhaité :
SELECT ordered_item.id AS `Id`, ordered_item.Item_Name AS `ItemName`, GROUP_CONCAT(Ordered_Options.Value) AS `Options` FROM ordered_item JOIN ordered_options ON ordered_item.id = ordered_options.ordered_item_id GROUP BY ordered_item.id
Cette requête produira le résultat suivant :
Id ItemName Options 1 Pizza Pepperoni,Extra Cheese 2 Stromboli Extra Cheese
La fonction GROUP_CONCAT garantit que les valeurs d'option sont concaténées en une seule chaîne et préserve l'ordre des options en fonction de leur colonne Option_Number. Cette méthode est très efficace et peut gérer un grand nombre d'options sans nécessiter de solution statique ni de complexité supplémentaire dans la requête.
Pour gérer les cas où le résultat concaténé dépasse la longueur maximale par défaut de 1024 caractères, MySQL fournit la variable group_concat_max_len. Définir cette variable sur une valeur plus élevée, comme indiqué ci-dessous, permettra d'accepter des chaînes concaténées plus grandes :
SET SESSION group_concat_max_len = 8192;
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!