Maison > base de données > tutoriel mysql > Comment puis-je faire pivoter une table MySQL avec des noms de colonnes dynamiques à partir des valeurs de ligne ?

Comment puis-je faire pivoter une table MySQL avec des noms de colonnes dynamiques à partir des valeurs de ligne ?

Patricia Arquette
Libérer: 2025-01-13 20:01:43
original
580 Les gens l'ont consulté

How Can I Pivot a MySQL Table with Dynamic Column Names from Row Values?

Valeurs de lignes dynamiques MySQL comme noms de colonnes

MySQL ne dispose pas de fonctionnalité pivot native pour les données de tableau héritées qui ont des valeurs de ligne dynamiques comme noms de colonne et sont affichées au format de tableau croisé dynamique. Cependant, les déclarations préparées à l'aide de GROUP_CONCAT() peuvent aider à obtenir les résultats souhaités.

Exemple de tableau :

<code class="language-sql">id    name       value
------------------------------
0     timezone   Europe/London
0     language   en
0     country    45
0     something  x
1     timezone   Europe/Paris
1     language   fr
1     country    46</code>
Copier après la connexion

Sortie cible :

<code>id    timezone       language    country  something
---------------------------------------------------
0     Europe/London  en          45       x
1     Europe/Paris   fr          46</code>
Copier après la connexion

Construisez la déclaration préparée comme suit :

<code class="language-sql">SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;</code>
Copier après la connexion

Cette requête génère dynamiquement une instruction SELECT qui utilise LEFT JOIN pour combiner des lignes avec la même valeur id, en extrayant la valeur correspondante pour une valeur name unique. Appuyez ensuite sur id pour regrouper les résultats afin de générer le format de tableau croisé dynamique souhaité.

Bien que MySQL ne dispose pas de fonctionnalités pivot natives, cette méthode fournit un moyen de récupérer de manière structurée les données des tables existantes avec des noms de colonnes dynamiques.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal