Tableaux croisés dynamiques dans MySQL avec colonnes dynamiques
Cette question aborde le défi de la création de tableaux croisés dynamiques MySQL avec des colonnes dynamiques. Bien que la solution fonctionne efficacement lorsque user_id est défini comme une chaîne, elle échoue lorsqu'elle rencontre des valeurs entières.
L'extrait de code fourni illustre la tentative initiale de création du tableau croisé dynamique. Cependant, pour résoudre le problème lié aux valeurs entières user_id, les corrections résident dans la façon dont les noms de colonnes sont construits dans la requête SQL dynamique.
Le code original :
... GROUP_CONCAT(DISTINCT CONCAT( 'max(case when user_id = ''', user_id, ''' then score end) AS ', user_id ) ) INTO @sql
int user_id les valeurs sont à l'origine du problème puisqu'elles sont utilisées directement comme noms de colonnes. Pour résoudre ce problème, ces valeurs doivent être enveloppées dans des backticks (`). Le code corrigé ajuste ceci :
... GROUP_CONCAT(DISTINCT CONCAT( 'max(case when user_id = ''', user_id, ''' then score end) AS `', user_id, '`' ) ) INTO @sql
La requête finale corrigée :
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;
Avec ces ajustements, le tableau croisé dynamique peut désormais être généré avec succès même lorsqu'il s'agit de valeurs user_id entières.
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!