当返回的列数是动态的时,如何计算MySQL查询的列数?

3

有没有可能检索查询返回的列数?使用绑定脚本语言(如php)可以轻松完成此操作,但我正在寻找仅限于数据库的解决方案。

示例:

CountCols(SELECT 'a','b','c')
    => 3
CountCols(SELECT * FROM information_schema.session_variables)
    => 2

2
出于好奇,这有什么用处?除了在编程上下文中进行相当通用/抽象的操作时,我想不到需要知道查询返回多少列的情况。 - ruakh
3个回答

3

这对你可行吗?

select 
    count(*)
from
    `information_schema`.`columns`
where
    `table_schema` = 'my_table_schema' and `table_name` = 'my_table_name';

只有当表名存在于多个数据库中时,才需要使用table_schema


根据您的回复评论,您希望计算动态列数。您可以使用临时表来实现此目的,但是您无法访问临时表的数据,可能需要安装补丁程序
值得注意的是,有一个类似的未解决的SO问题,询问如何从临时表中选择列。

那本来是个好主意,但我更想要一个通用的东西。问题在于我需要知道任意结果的列数(就像示例中一样)。这些信息并未存储在信息模式中。 - Mikulas Dite
将它们选择到视图或临时表中,然后访问information_schema?我们可以搜索一些执行此操作的补丁。 - JoshDM
这里有一个人已经准备好提供一个补丁来添加访问临时表的功能:http://venublog.com/2010/02/03/show-temporary-tables/。同时,从临时表中选择列类似于这个未解决的 SO 问题:http://stackoverflow.com/questions/10443672/list-of-temporary-table-columns-mysql。 - JoshDM
嗯,那似乎有点不太干净。不过我一定会测试它的。谢谢。 - Mikulas Dite
你最终做了什么? - JoshDM
我重新构想了原始问题,并设法将其适配到信息模式中,消除了临时表。谢谢 :) - Mikulas Dite

2

如果你想知道表中的列,请执行以下操作:

DESCRIBE `table_name`

否则,除了选择*以外,在选择查询中获取列数是没有“真正”的方法的,因为您选择了某些列 --> 所以将知道您选择了多少列。

尽管如此,我也无法通过编程从“Describe”中获取行数。你说得对,我通常应该知道列,但并非总是如此。 - Mikulas Dite
非常好。它在结果左侧显示了行计数器。对我很有效。 - Mateus Arruda

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接