Requête MySQL pour récupérer des données avec des noms de colonnes

J’écris un outil qui doit récupérer les noms de colonne de l’dataset récupéré lorsqu’une requête lui est appliquée.

Si vous êtes familier avec phpMyAdmin, vous vous rendrez compte que le volet SQL fait ce qu’il exécute votre requête et affiche le résultat avec les noms de colonne. Je me demande à quel point la requête serait difficile, elle aboutit toujours à des noms de colonne et quelle est en réalité la programmation en arrière-plan? Est-ce que c’est comme, il parsing la requête et ensuite trouver les noms de table à partir de celui-ci et puis récupère d’abord les noms de colonne en utilisant query show columns from table-name et ensuite les données?

Y a-t-il une meilleure façon?

MISE À JOUR Désolé pour les informations incomplètes, je pense que je dois dire que j’utilise le connecteur MySQL pour .NET et que j’utilise C #.

Vos colonnes font partie du métadate du DataReader ou DataTable que vous chargez en c #

De MSDN pour DataTable:

 private void PrintColumnNames(DataSet dataSet) { // For each DataTable, print the ColumnName. foreach(DataTable table in dataSet.Tables) { foreach(DataColumn column in table.Columns) { Console.WriteLine(column.ColumnName); } } } 

Pour un DataReader, voir Pouvez-vous obtenir les noms de colonne d’un SqlDataReader?

J’ai résolu mon problème en utilisant le code suivant.

 var QueryCommand = new MySqlCommand(txtQuery.Text, Connection); var ResultReader = QueryCommand.ExecuteReader(); for (var f = 0; f < ResultReader.FieldCount; f++) { ResultGrid.Columns.Add("column" + f, ResultReader.GetName(f)); } 

Vous avez besoin d’un langage de programmation identique à phpMyAdmin. Vous pouvez utiliser mysql_fetch_assoc()

Il retournera une ligne de données dans laquelle chacun des éléments aura pour clé le nom de la colonne:

Solution PHP

 array( [0] => array( [id] => 1, [name] => 'Test name' ), [1] => array( [id] => 2, [name] => 'Name 2' ) ) 

vous pouvez utiliser SHOW COLUMNS

 mysql> SHOW COLUMNS FROM City; +------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | Country | char(3) | NO | UNI | | | | Dissortingct | char(20) | YES | MUL | | | | Population | int(11) | NO | | 0 | | +------------+----------+------+-----+---------+----------------+ 

Voir: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

Mais INFORMATION_SCHEMA est le moyen ANSI de déterminer les colonnes, les tables, les contraintes, etc. INFORMATION_SCHEMA.COLUMNS est équivalent à SHOW COLUMNS :

 SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild'] 

si vous avez déterminé le nombre de colonnes, vous pouvez le faire en pur mysql. Par exemple pour 3 colonnes:

 (select max(f1), max(f2), max(f3) from ( select IF(ordinal_position=1,column_name,0) AS f1, IF(ordinal_position=2,column_name,0) AS f2, IF(ordinal_position=3,column_name,0) AS f3 from information_schema.columns where table_name='t') tt) union (select * from `t`)