Comment sélectionner les noms de colonnes dynamiquement dans mySQL
Je veux sélectionner la colonne des noms, mais je ne connais pas la structure de la table à l'avance et il peut changer donc je ne peux pas juste le code de l'instruction select avec des noms de colonne. Je ne veux PAS non pour sélectionner toutes les colonnes. Est-il et facile de faire cela?
Mes pensées sont c'est une sorte de combinaison de ces deux requêtes, mais mon SQL n'est pas bon.
SHOW COLUMNS FROM table_name;
SELECT * FROM table_name;
J'ai essayé en utilisant un sous-select, mais, il ne fonctionne pas. Rien ne semble se passer, je n'ai pas d'erreur, j'ai juste pas de résultats
SELECT (SELECT column_name
FROM information_schema.columns
WHERE table_name ='table_name')
FROM table_name;
Peut-être que j'ai besoin de faire une jointure?..
De toute façon, toute aide serait super, merci
Il semble étrange que la structure de la table est en constante évolution, qui sonne comme un défaut de conception. Vous pouvez poster votre structure actuelle ou de fournir plus de contexte sur vos tables?
Il n'est pas constamment en train de changer. Cependant la structure des tables n'est pas encore signé, et donc je suis en train de faire un système qui est assez intelligent pour s'adapter aux changements qui pourraient être dans le futur. Je ne sais pas les noms de colonne à l'avance. Je pourrais le faire en PHP avec 2 requêtes distinctes, mais j'ai pensé que je pourrais aussi le faire à la Base de données de la couche de trop. Je pensais que je pouvais obtenir les noms de colonne, puis utiliser ces données pour interroger la table en fait construire une dynamique de l'instruction select.
Vous pouvez le faire avec le SQL dynamique (il sera en fait deux requêtes), mais si vous ne voulez pas toutes les colonnes, vous aurez de code dans votre requête, sélectionnez les colonnes à partir des métadonnées quels sont les critères pour l'inclusion d'une colonne (et tout particulièrement de la commande que vous voulez). Mais vous ne pouvez pas transformer les résultats d'une requête sur les métadonnées directement dans une liste de sélection de la requête de sélection.
Roux Mes critères pour les noms de colonne est un préfixe sur le nom de la colonne. Je pensais que je pouvais soit exlude ou inclure sur cette base. "AFFICHER les COLONNES from table_name where Champ COMME %préfixe%"
Il n'est pas constamment en train de changer. Cependant la structure des tables n'est pas encore signé, et donc je suis en train de faire un système qui est assez intelligent pour s'adapter aux changements qui pourraient être dans le futur. Je ne sais pas les noms de colonne à l'avance. Je pourrais le faire en PHP avec 2 requêtes distinctes, mais j'ai pensé que je pourrais aussi le faire à la Base de données de la couche de trop. Je pensais que je pouvais obtenir les noms de colonne, puis utiliser ces données pour interroger la table en fait construire une dynamique de l'instruction select.
Vous pouvez le faire avec le SQL dynamique (il sera en fait deux requêtes), mais si vous ne voulez pas toutes les colonnes, vous aurez de code dans votre requête, sélectionnez les colonnes à partir des métadonnées quels sont les critères pour l'inclusion d'une colonne (et tout particulièrement de la commande que vous voulez). Mais vous ne pouvez pas transformer les résultats d'une requête sur les métadonnées directement dans une liste de sélection de la requête de sélection.
Roux Mes critères pour les noms de colonne est un préfixe sur le nom de la colonne. Je pensais que je pouvais soit exlude ou inclure sur cette base. "AFFICHER les COLONNES from table_name where Champ COMME %préfixe%"
OriginalL'auteur TheSnooker | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Essayer cette SQLFiddle:
Quelques questions:
Il vous faudra probablement un certain ORDRE PAR sur votre jeu de résultats.
Il y a une limite à ce que vous pouvez faire en termes de jointures et des choses.
Vous déplacer de validation à l'exécution où il est plus susceptible d'être oubliée par les tests.
Vous êtes l'espoir d'être en mesure de gérer les changements de schéma facilement. Cette technique ne traitera que les modifications de schéma d'un certain type, vous pouvez prévoir, et d'autres, vous devrez probablement modifier ce code, de toute façon.
la génération de code et le code SQL dynamique a une place dans rendre plus facile à maintenir des systèmes. En fait, j'ai une présentation complète sur l'utilisation de métadonnées pour la génération de code et de code de base de données de surveillance de la santé. Mais je ne pense pas qu'il a une meilleure place dans la future proofing ce scénario particulier.
OriginalL'auteur Cade Roux