【问题标题】:MySQL Query To Retrieve Data With Column NamesMySQL 查询以检索具有列名的数据
【发布时间】:2011-07-10 17:22:23
【问题描述】:

我正在编写一些工具,当任何查询应用于它时,它必须检索检索到的数据集的列名。

如果您熟悉 phpMyAdmin,您会意识到 SQL 窗格的作用是运行您的查询并使用列名显示结果。我想知道查询会有多难,它总是会产生列名,而幕后的实际编程是什么?是不是会分析查询,然后从中查找表名,然后先使用查询show columns from table-name 检索列名,然后再检索数据?

有没有更好的办法?

更新 抱歉信息不完整,我想我必须说我正在使用 MySQL 连接器用于 .NET 并且正在使用 C#。

【问题讨论】:

  • 你用什么语言写的?可能有一种预先制作的方法来检索查询元数据。

标签: c# .net mysql sql


【解决方案1】:

我使用以下代码解决了我的问题。

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# 答案相似。 c# 原生有 ResultReader 吗?
【解决方案2】:

您的列是您在 c# 中加载的 DataReader 或 DataTable 的元数据的一部分

来自MSDN 的数据表:

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,请参阅 Can you get the column names from a SqlDataReader?

【讨论】:

  • 我会将您的解决方案标记为答案,因为您获得的票数比我自己的解决方案多:)
【解决方案3】:

你可以使用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']

【讨论】:

  • 需要用数据本身来获取它们。
【解决方案4】:

您需要一种编程语言来做与 phpMyAdmin 相同的事情。你可以使用mysql_fetch_assoc()

它将返回一行数据,其中每个元素的键名都是列名:

PHP解决方案

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

【讨论】:

  • 我正在使用 C# 和 MySql .NET 连接器
  • 您没有在问题中指定任何语言。
  • 从 PHP 的角度来看,您的解决方案无疑很有帮助,因为我也没有意识到这一点。
【解决方案5】:

如果你已经确定了列数,你可以在纯 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`)

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 2013-10-17
    • 2014-01-06
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多