Sélection dynamique de colonnes dans MySQL
Dans MySQL, il peut y avoir des scénarios dans lesquels vous devez récupérer des colonnes spécifiques en fonction d'une structure de table inconnue ou anticipée changements de schéma. Cela pose un défi lorsqu'il n'est pas pratique de coder en dur les noms de colonnes dans une instruction SQL. Cet article explore une solution à ce problème sans avoir recours à la sélection de chaque colonne.
Utilisation du schéma d'information
La base de données information_schema contient des métadonnées sur toutes les bases de données et tables du serveur MySQL. Il comprend une table appelée COLUMNS, qui stocke des informations sur les colonnes, notamment leurs noms, types de données et appartenance à la table.
Construire une requête dynamique
Pour sélectionner dynamiquement une colonne noms, vous pouvez utiliser une combinaison de fonctions MySQL et de la table information_schema.COLUMNS. Voici une approche étape par étape :
Exemple d'instruction SQL
L'instruction SQL suivante montre comment sélectionner dynamiquement les noms de colonnes commençant par "préfixe" du tableau "atable":
CREATE TABLE atable ( prefix1 VARCHAR(10), prefix2 VARCHAR(10), notprefix3 INT, notprefix4 INT ); INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg', 1, 1); SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), ' FROM atable;') INTO @query FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = 'atable' AND c.COLUMN_NAME LIKE 'prefix%' ORDER BY c.ORDINAL_POSITION; PREPARE stmt FROM @query; EXECUTE stmt;
Sortie :
La sortie de cette instruction sera une seule ligne contenant l'instruction SQL suivante :
SELECT prefix1, prefix2 FROM atable;
En exécutant cette instruction, vous récupérerez uniquement les colonnes "prefix1" et "prefix2" de la table "atable".
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!