在不返回行的情况下检索MySQL列名


Retrieve MySQL column names when no rows are returned

想知道当查询结果不返回行时,是否有办法让MySQL返回列名?问题是,我们的系统有时会有多个大型查询:

SELECT * FROM table
SELECT table1.*, table2.field1, table2.field2
SELECT table1.field1 AS f1, SUM(table2.field1) AS f2

等等。因此,当返回的结果为空时,获取列名的唯一方法是解析查询,并尝试在information_schema表上运行查询。这是可能的,但会相当复杂。有什么想法吗?

MySQL的一些PHP接口有一个用于结果集元数据的函数,即使对于零行的结果集,它也应该返回信息。

  • MySQLi具有MySQLi_stmt::result_metadata()。

  • PDO有PDOStatement::getColumnMeta(),但它被标记为"实验性的",这可能只是意味着它没有在所有PDO驱动程序中得到很好的测试。

可以使用的一种技术是在查询上创建一个视图,然后使用视图名称查询information_schema

也就是说,类似这样的东西:

create view v_JustForColumns as
    <your query here>;
select *
from information_schema.columns
where table_name = 'v_JustForColumns';
drop view v_JustForColumns;

试试下面的一个。这里用实际的模式名称替换YOUR_SCHEMA,用实际的表名称替换YOURL_TABLENAME:

select column_name from information_schema.columns  
where not exists(select * from YOUR_SCHEMA.YOUR_TABLENAME) 
and  table_name='YOUR_TABLENAME';