Tableau croisé dynamique dans MySQL
Lorsque vous travaillez avec une base de données, il est souvent utile de créer des tableaux croisés dynamiques pour résumer les données sur plusieurs colonnes. Cependant, lorsque les noms de colonnes sont dynamiques, cela peut présenter un défi. Cet article explique comment créer un tableau croisé dynamique dans MySQL, en particulier lorsque les ID utilisateur sont des entiers.
Dans l'exemple fourni par l'utilisateur, la requête a échoué lorsque l'ID utilisateur était un entier, mais a bien fonctionné lorsque c'était une chaîne. Le problème est survenu parce que les valeurs étaient utilisées directement comme noms de colonnes. Pour résoudre ce problème, il est nécessaire d'envelopper les valeurs entre des guillemets (`) pour créer des noms de colonnes valides.
Par exemple, au lieu de :
max(case when user_id = 1 then score end) as 1
La syntaxe corrigée serait :
max(case when user_id = 1 then score end) as `1`
De plus, lors de la sélection dynamique des colonnes, les backticks doivent également être inclus. La requête corrigée ressemblerait à :
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when user_id = ''', user_id, ''' then score end) AS `', user_id, '`' ) ) INTO @sql FROM measure2; SET @sql = CONCAT('SELECT inspection_date, ', @sql, ' FROM measure2 GROUP BY inspection_date'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
En effectuant ces ajustements, le tableau croisé dynamique peut être généré avec succès, même lorsque les ID utilisateur sont des entiers.
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!