Maison >base de données >tutoriel mysql >Comment puis-je transposer les données d'une table SQL avec des noms de colonnes générés dynamiquement et définis par l'utilisateur ?
Transposer des données de table SQL avec des noms de champs définis par l'utilisateur
Le pivotement des données, ou leur transposition, implique la transformation d'une table où les colonnes représentent des attributs et les lignes représentent les données d'entité dans un tableau où les lignes représentent les attributs et les colonnes représentent les données d'entité. Ceci est souvent utile lorsque vous travaillez avec des noms de champs définis par l'utilisateur, comme le montre l'exemple de table fourni.
Requête de table transposée
Pour transposer la table donnée, vous peut utiliser une combinaison de fonctions SQL et d'instructions conditionnelles, comme indiqué ci-dessous :
SELECT t.UserId, MAX(CASE WHEN t.FieldName = 'Username' THEN t.FieldValue ELSE NULL END) AS Username, MAX(CASE WHEN t.FieldName = 'Password' THEN t.FieldValue ELSE NULL END) AS Password, MAX(CASE WHEN t.FieldName = 'Email Address' THEN t.FieldValue ELSE NULL END) AS Email FROM t GROUP BY t.UserId
Explication
Requête dynamique avec instructions préparées
Pour gérer une liste dynamique de noms de champs, vous pouvez utiliser l'instruction préparée de MySQL (SQL dynamique) syntaxe :
SET @sql = 'SELECT UserId, '; SELECT GROUP_CONCAT(CONCAT('MAX(CASE WHEN FieldName = ''', FieldName, ''' THEN FieldValue ELSE NULL END) AS ', FieldName)) INTO @sql FROM (SELECT DISTINCT FieldName FROM t); SET @sql = CONCAT(@sql, ' FROM t GROUP BY UserId'); PREPARE stmt FROM @sql; EXECUTE stmt;
Cette requête crée dynamiquement une instruction SQL basée sur les noms de champs distincts de la table et l'exécute à l'aide d'une instruction préparée.
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!