Maison > base de données > tutoriel mysql > Comment sélectionner dynamiquement des colonnes dans MySQL à l'aide d'un schéma d'information ?

Comment sélectionner dynamiquement des colonnes dans MySQL à l'aide d'un schéma d'information ?

Susan Sarandon
Libérer: 2024-12-22 06:58:27
original
1029 Les gens l'ont consulté

How to Dynamically Select Columns in MySQL Using Information Schema?

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 :

  1. Extrayez les noms de colonnes qui vous intéressent de information_schema.COLUMNS à l'aide d'une instruction conditionnelle (par exemple, en filtrant les préfixes de colonnes spécifiques).
  2. Concaténez les noms de colonnes sélectionnés dans une chaîne qui peut être utilisée dans le cadre d'une instruction SELECT.
  3. Créez une instruction préparée en plaçant la chaîne concaténée dans une variable et en l'exécutant avec EXECUTE.

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;
Copier après la connexion

Sortie :

La sortie de cette instruction sera une seule ligne contenant l'instruction SQL suivante :

SELECT prefix1, prefix2 FROM atable;
Copier après la connexion

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!

Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal