Maison >base de données >tutoriel mysql >Comment créer un tableau croisé dynamique dans MySQL avec des ID utilisateur entiers ?

Comment créer un tableau croisé dynamique dans MySQL avec des ID utilisateur entiers ?

DDD
DDDoriginal
2024-11-12 22:59:02446parcourir

How to Create a Dynamic Pivot Table in MySQL with Integer User IDs?

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!

Déclaration:
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