MySQL查询获取数据与列名
本文关键字:数据 查询 获取 MySQL | 更新日期: 2023-09-27 18:01:45
我正在编写一些工具,当任何查询应用于它时,必须检索检索到的数据集的列名。
如果你熟悉phpMyAdmin,你会意识到SQL窗格的作用是运行你的查询并显示带有列名的结果。我想知道这个查询有多难,它总是得到列名,以及幕后的实际编程是什么?它是否像,它分析查询,然后从中找到表名,然后首先使用查询show columns from table-name
检索列名,然后是数据?
有更好的方法吗?
对不起,信息不完整,我想我必须说我正在使用MySQL连接器。net和c#。
我用下面的代码解决了这个问题。
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));
}
您的列是您在c#中加载的DataReader或DataTable元数据的一部分
From MSDN for 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);
}
}
}
关于DataReader,请参见您可以从SqlDataReader获取列名吗?
您可以使用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 | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+
见:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
但是INFORMATION_SCHEMA是确定列、表、约束等的ANSI方法。INFORMATION_SCHEMA。COLUMNS相当于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']
您需要一种编程语言来实现与phpMyAdmin相同的功能。您可以使用mysql_fetch_assoc()
它将返回一行数据,其中每个元素将以列的名称为键:
PHP解决方案array(
[0] => array(
[id] => 1,
[name] => 'Test name'
),
[1] => array(
[id] => 2,
[name] => 'Name 2'
)
)
如果你已经确定了列数,你可以在纯mysql中这样做。例如对于3列:
(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`)