"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Guide de création dynamique MySQL dynamique: ID utilisateur entier

Guide de création dynamique MySQL dynamique: ID utilisateur entier

Publié le 2025-04-13
Parcourir:684

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

Pivot Tables dans MySQL avec des colonnes dynamiques

Cette question aborde le défi de créer des tables pivot MySQL avec des colonnes dynamiques. Bien que la solution fonctionne efficacement lorsque User_ID est définie comme une chaîne, elle échoue lors de la rencontre des valeurs entières.

L'extrait de code fourni illustre la tentative initiale de créer la table pivot. Cependant, pour résoudre le problème lié aux valeurs user_id entières, les corrections résident dans la façon dont les noms de colonne sont construits dans la requête SQL dynamique.

Le code d'origine:

...
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 en provoquant le problème car elles sont utilisées directement comme noms de colonnes. Pour y remédier, 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, la table pivot peut désormais être générée avec succès même lorsqu'elle traite des valeurs user_id entières.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3