Maison >base de données >tutoriel mysql >Comment créer une requête de tableau croisé dynamique MySQL à l'aide d'instructions préparées ?

Comment créer une requête de tableau croisé dynamique MySQL à l'aide d'instructions préparées ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 13:53:09871parcourir

How to Create a Dynamic MySQL Pivot Table Query Using Prepared Statements?

Requête de tableau croisé dynamique MySQL avec des colonnes dérivées de données dynamiques

La requête de tableau croisé dynamique

Votre exigence est de faire pivoter les données du produit et tables product_additional, avec les colonnes remplies dynamiquement en fonction des valeurs de la table product_additional. La requête actuelle, qui utilise l'agrégation conditionnelle avec IF(), n'est pas dynamique et nécessite des modifications manuelles à chaque nouveau champ ajouté.

Solution utilisant des instructions préparées

Pour réaliser un pivotement dynamique dans MySQL, nous peut utiliser des instructions préparées, qui nous permettent de construire une chaîne de requête au moment de l'exécution. Le code suivant illustre cette approche :

-- Initialize @sql variable
SET @sql = NULL;

-- Dynamically create the query string by iterating over distinct `fieldname` values
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.fieldname = ''',
      fieldname,
      ''', pa.fieldvalue, NULL)) AS ',
      fieldname
    )
  ) INTO @sql
FROM product_additional;

-- Concatenate the constructed string with the base query
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 the query
PREPARE stmt FROM @sql;

-- Execute the prepared query
EXECUTE stmt;

-- Deallocate the prepared statement
DEALLOCATE PREPARE stmt;

Exécution

Ce code génère une chaîne de requête dynamique basée sur les valeurs de nom de champ uniques dans la table product_additional. La chaîne est ensuite utilisée pour construire une instruction PREPARE, qui est exécutée puis désallouée.

Limitations

Notez que la fonction GROUP_CONCAT a une limite de caractères de 1024 caractères. Vous pouvez augmenter cette limite en définissant le paramètre group_concat_max_len.

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