Maison >base de données >tutoriel mysql >Comment faire pivoter les données dans MySQL avec des noms de colonnes dynamiques à partir d'une seule colonne ?
Question :
Dans les anciennes tables MySQL, vos données avaient des noms de colonnes mutables stockés sous forme de valeurs uniques dans une seule colonne nommée "nom". Vous avez besoin d'une requête qui convertit ces données dans un format pivot, où les valeurs de nom deviennent les en-têtes de colonne et les valeurs de champ correspondantes deviennent les valeurs sous ces en-têtes.
Solution :
Malgré le manque de support natif pour les pivots, MySQL peut toujours y parvenir grâce au SQL dynamique et à la fonction GROUP_CONCAT().
Requête MySQL :
<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>
Instructions :
Résultat :
La requête renvoie un ensemble de résultats pivoté avec des valeurs de nom comme en-têtes de colonne et des valeurs de champ comme valeurs correspondantes :
id | timezone | language | country | something |
---|---|---|---|---|
0 | Europe/London | en | 45 | x |
1 | Europe/Paris | fr | 46 | NULL |
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!