Compétences de conversion dynamique de lignes et de colonnes MySQL
Dans MySQL, la conversion dynamique de lignes en colonnes, tout en ajoutant dynamiquement des colonnes pour accueillir de nouvelles lignes, peut être réalisée à l'aide de diverses techniques.
Utilisez les fonctions GROUP BY et MAX
Une façon consiste à utiliser les fonctions GROUP BY et MAX. Par exemple, considérons un tableau avec des lignes et des colonnes comme celui-ci :
<code>表A +--+-----+----+ | id | order | data | +--+-----+----+ | 1 | 1 | P | | 2 | 2 | Q | | 2 | 1 | R | | 1 | 2 | S | +--+-----+----+</code>
Pour convertir ces lignes en colonnes, vous pouvez utiliser la requête suivante :
<code>SELECT ID, MAX(IF(`order` = 1, data, NULL)) data1, MAX(IF(`order` = 2, data, NULL)) data2 FROM TableA GROUP BY ID</code>
Cette requête regroupe les lignes en fonction de la colonne ID et renvoie la valeur correspondante pour chaque colonne de commande à l'aide des instructions MAX et IF. Le résultat sera :
<code>+--+-----+-----+ | id | data1 | data2 | +--+-----+-----+ | 1 | P | S | | 2 | R | Q | +--+-----+-----+</code>
Utiliser le SQL dynamique
Si la colonne de commande a plusieurs valeurs, il peut être plus approprié d'utiliser du SQL dynamique. Cela permet aux requêtes d'être générées dynamiquement et de s'adapter à différentes quantités de commandes.
<code>SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`) ) INTO @sql FROM TableName; SET @sql = CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;</code>
En générant dynamiquement des requêtes basées sur différentes valeurs d'ordre, cette approche offre de la flexibilité et garantit que la table de résultats s'adaptera automatiquement à toute modification des données.
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!