想知道当查询结果没有返回任何行时,是否有办法让MySQL返回列名?问题是我们的系统有时会有多个大型查询:
SELECT * FROM table
SELECT table1.*, table2.field1, table2.field2
SELECT table1.field1 AS f1, SUM(table2.field1) AS f2
等。因此,只有在返回结果为空时获取列名的方法是解析查询,并尝试在information_schema表上运行查询。这是可能的,但会相当复杂。有什么想法吗?
答案 0 :(得分:2)
MySQL的一些PHP接口具有结果集元数据的功能,即使对于零行的结果集也应返回信息。
MySQLi有mysqli_stmt::result_metadata()。
PDO有PDOStatement::getColumnMeta(),但它被标记为“实验性”,这可能仅仅意味着它在所有PDO驱动程序中都没有经过良好测试。
答案 1 :(得分:0)
您可以使用的一种技术是在查询上创建视图,然后使用视图名称查询information_schema
。
就是这样:
create view v_JustForColumns as
<your query here>;
select *
from information_schema.columns
where table_name = 'v_JustForColumns';
drop view v_JustForColumns;
答案 2 :(得分:0)
尝试以下方法。这里用实际的模式名称替换YOUR_SCHEMA,用实际的表名替换YOUR_TABLENAME:
select column_name from information_schema.columns
where not exists(select * from YOUR_SCHEMA.YOUR_TABLENAME)
and table_name='YOUR_TABLENAME';