Maison >base de données >tutoriel mysql >Comment puis-je inverser GROUP_CONCAT pour extraire des valeurs individuelles des chaînes agrégées dans MySQL ?

Comment puis-je inverser GROUP_CONCAT pour extraire des valeurs individuelles des chaînes agrégées dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 07:24:25813parcourir

How Can I Reverse GROUP_CONCAT to Extract Individual Values from Aggregated Strings in MySQL?

Démêler GROUP_CONCAT : extraire des valeurs individuelles à partir de données agrégées

Dans le domaine de la gestion de bases de données, la fonction GROUP_CONCAT est un outil puissant pour agréger plusieurs valeurs dans une seule chaîne séparée par des virgules. Cependant, il peut arriver que vous soyez confronté au défi inverse : démanteler ces chaînes agrégées en leurs composants individuels.

L'essence du problème

Considérez les données suivantes dans un tableau nommé "couleurs":

| id | colors               |
|----+----------------------|
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |

Votre objectif est de transformer ces données en une structure où chaque couleur est représentée comme une couleur distincte row :

| id | colors     |
|----+------------|
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |

Une solution : démêler les ficelles

MySQL propose plusieurs techniques pour accomplir cette tâche. Une approche utilise les fonctions SUBSTRING_INDEX et SUBSTRING comme suit :

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM
  colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit

Cette requête fonctionne en :

  1. Utilisation de SUBSTRING_INDEX pour trouver les positions de début et de fin de chaque couleur dans la virgule. chaîne séparée.
  2. Joindre avec un tableau qui génère des nombres correspondant à la couleur positions.
  3. Filtrer les lignes où le nombre de couleurs dépasse la plage de la table jointe.
  4. Tri des résultats par identifiant et position de couleur.

Dévoilement le Mystère : Agrégation Inversée ou Un-GROUP_CONCAT

L'opération décrite ci-dessus est souvent appelé « agrégation inversée » ou « un-GROUP_CONCAT ». Il vous permet d'extraire et de dégrouper des valeurs individuelles à partir de données préalablement agrégées ou concaténées. Cette technique est particulièrement utile lorsque vous devez effectuer une analyse ou des transformations plus approfondies sur des points de données individuels plutôt que sur l'agrégat lui-même.

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