2013-02-14 32 views
3

是否有可能檢索查詢返回的列數的計數?這可以很容易地使用PHP等綁定腳本語言完成,但我正在尋找僅用於db的解決方案。如何在返回的列數爲動態時計算MySQL查詢的列數?

例子:

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

出於好奇 - 這有什麼用處?當我需要知道查詢返回多少列時,我無法想到這種情況,除非在編程上下文中我正在做一些相當通用/抽象的事情。 – ruakh 2013-02-14 22:33:28

回答

3

這會爲你工作嗎?

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

你只需要如果表名在多個數據庫中不存在使用table_schema


根據您的回覆評論,您正在計算動態列數。您可能可以使用臨時表執行此操作,但不能在沒有可能的情況下訪問臨時表的數據installing a patch

值得注意的是,有a similar outstanding SO question問如何從臨時表中選擇列。

+0

這將是這個想法,但我更尋找一些通用的東西。問題是我需要知道任意結果的列數(例如)。這些不存儲在信息架構中。 – 2013-02-14 22:39:50

+0

將它們選擇到視圖或臨時表中,然後訪問information_schema?我們可以搜索一些這樣做的補丁。 – JoshDM 2013-02-14 22:41:44

+0

以下是有補丁程序可以添加臨時表的權限的人員:http://venublog.com/2010/02/03/show-temporary-tables/;同時,從臨時表中選擇列類似於這個未答覆的SO問題:http://stackoverflow.com/questions/10443672/list-of-temporary-table-columns-mysql – JoshDM 2013-02-14 22:47:05

0

那麼,如果你想知道在一個表中的列只是做:

DESCRIBE `table_name` 

否則就沒有「真正」的方式來獲得的列數選擇查詢,因爲除了選擇*以外,您選擇了某些列 - >所以您將將知道您選擇了多少列。

+0

雖然這是事實,但我無法從「描述」中獲得行數。你有一點我通常應該知道列。情況並非總是如此。 – 2013-02-14 22:38:21