SQL dynamique pour la sélection de colonnes génériques
Question :
Supposons que vous ayez une table de base de données avec plusieurs colonnes partageant des préfixes similaires, tels que « Fruit » et « Légume ». Comment pouvez-vous sélectionner efficacement les données de toutes les colonnes commençant par un mot spécifique sans spécifier manuellement le nom de chaque colonne ?
Exemple :
Considérez la structure de table suivante :
<code class="markdown">Foods | Fruit | Vegetable ---------------------- Apples | Banana | Carrots Pears | Grapes | Potatoes Oranges | Lemon | Tomatoes</code>
Vous souhaitez sélectionner toutes les colonnes dont le nom commence par « Légume ».
Réponse :
Substitutions directes de caractères génériques dans les requêtes MySQL, telles que SELECT Les % végétaux ne sont pas pris en charge. Pour sélectionner dynamiquement toutes les colonnes répondant à ces critères, vous pouvez créer la requête SQL basée sur les informations obtenues à partir du schéma de base de données. Voici une solution :
<code class="sql">SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'Foods' AND table_schema = 'YourDB' AND column_name LIKE 'Vegetable%'</code>
Cette requête récupère les noms de toutes les colonnes de la table Foods commençant par « Légume ». Vous pouvez ensuite utiliser ces informations pour construire dynamiquement une deuxième requête qui sélectionne les données des colonnes souhaitées :
<code class="php">$columnList = mysql_query($columnsQuery); $columnArray = array(); while ($row = mysql_fetch_assoc($columnList)) { array_push($columnArray, $row['COLUMN_NAME']); } $columns = implode(",", $columnArray); $query = "SELECT " . $columns . " FROM Foods";</code>
En exécutant cette requête, vous pouvez récupérer toutes les données des colonnes dont les noms commencent par "Légume" dans un seul passage.
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!