Transformation de valeurs séparées par des virgules en lignes individuelles dans MySQL
Ce guide montre comment convertir les valeurs séparées par des virgules dans une colonne MySQL en lignes individuelles. Disons que vous avez une table avec une colonne contenant des données délimitées par des virgules comme celle-ci :
<code>somethingA,somethingB,somethingC somethingElseA, somethingElseB</code>
L'objectif est de restructurer ces données en :
<code>somethingA somethingB somethingC somethingElseA somethingElseB</code>
Cette requête SQL réalise cette transformation :
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
Explication :
Cette requête utilise intelligemment une table de nombres générée dynamiquement (la sous-requête) et la fonction SUBSTRING_INDEX()
. SUBSTRING_INDEX()
extrait les sous-chaînes en fonction d'un délimiteur. Le tableau des nombres fournit l'index pour chaque valeur séparée par des virgules. La clause WHERE
garantit que la requête ne traite que les valeurs correspondant au nombre réel d'éléments séparés par des virgules dans chaque ligne.
Points clés :
SUBSTRING_INDEX(string, delimiter, count)
: Cette fonction est cruciale. string
est l'entrée, delimiter
est la virgule et count
spécifie quelle occurrence du délimiteur utiliser. Un count
de -1
obtient tout après la dernière occurrence du délimiteur.WHERE
ajuste dynamiquement le nombre de lignes renvoyées en fonction du nombre de virgules dans la chaîne d'origine, évitant ainsi les erreurs.Cette méthode divise efficacement les valeurs séparées par des virgules en lignes individuelles, ce qui donne un ensemble de données plus propre et plus gérable.
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!