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>
Sortie cible :
<code>id timezone language country something --------------------------------------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46</code>
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>
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!