Requêtes de tableau croisé dynamique MySQL dynamiques avec colonnes dynamiques
Dans ce scénario, les données de produit sont stockées dans deux tables : product et product_additional. L'objectif est de créer une requête MySQL dynamique qui peut s'adapter aux modifications de la table product_additional, permettant l'ajout de nouveaux noms de champs et valeurs de champs sans avoir besoin de modifier manuellement la requête.
La requête fournie récupère efficacement les données de les deux tableaux et les affiche sous forme de tableau, en remplissant dynamiquement les colonnes de taille, de hauteur et de couleur de la table product_additional. Cependant, cette requête devient statique si de nouveaux champs sont ajoutés dynamiquement.
Pour obtenir un véritable dynamisme, les instructions Prepared de MySQL peuvent être utilisées. Ces instructions permettent la construction de requêtes dynamiques au moment de l'exécution. Le code serait le suivant :
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) ) INTO @sql FROM product_additional; SET @sql = CONCAT('SELECT p.id , p.name , p.description, ', @sql, ' FROM product p LEFT JOIN product_additional AS pa ON p.id = pa.id GROUP BY p.id, p.name, p.description'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Ce code construit la requête dynamique basée sur les données de la table product_additional, en ajoutant dynamiquement les colonnes nécessaires à la chaîne de requête. La requête dynamique résultante est ensuite exécutée et les résultats sont affichés.
Considérations supplémentaires :
Il est important de noter que la fonction GROUP_CONCAT a une limite de longueur maximale de 1 024 caractères. . Si la requête nécessite plus de caractères, le paramètre group_concat_max_len peut être ajusté pour s'adapter.
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!