2012-03-11 53 views
2

有沒有一種方法來獲取列的默認值,因爲它們是結果集的一行?獲取列默認值,因爲它們是結果集的一行

`id` mediumint(9) NOT NULL AUTO_INCREMENT, 
`state` tinyint(2) NOT NULL DEFAULT '22', 
`pubdate` datetime NOT NULL DEFAULT '2012-01-01 00:00:00', 

例如像這樣的表應該返回該記錄:

id->NULL (?) 
state->22 
pubdate->2012-01-01 00:00:00 
在實踐

,當一些用戶打開edit.php ID = 44,他將獲得該行44(更新模式),但是,如果他打開edit.php?ID = 0(插入模式),我想,該字段包含默認值佔位

預先感謝您

回答

3

有一個DEFAULT功能

SELECT DEFAULT(id) , DEFAULT(EXAMPLE) FROM test LIMIT 1 

有了上面的查詢,似乎你必須ATLEAST一個記錄因爲它不返回任何記錄。對於當前時間戳,它返回一個時間戳格式爲0的字符串。

+0

非常接近...有沒有一種方法來DEFAULT()每列?像那樣的東西...SELECT DEFAULT(*)FROM mytable – skyline26 2012-03-11 04:49:42

+0

恐怕似乎沒有這樣的東西。但是你可以在文檔或谷歌上進行深入研究。 – 2012-03-11 04:58:27

3

當然,使用information_schema數據庫(W HICH存儲所有有關數據庫的結構信息),你可以這樣做:

SELECT 
    COLUMN_NAME, 
    COLUMN_DEFAULT 
    TABLE_NAME 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_NAME='your_table_name' 
    AND TABLE_SCHEMA='your_database_name' 

如果你有列的數量有限,您可以使用一個結構像其收集到行:

SELECT 
    id.defaultval AS id_default, 
    state.defaultval AS state_default, 
    pubdate.defaultval AS pubdate_default 
FROM 
    (SELECT TABLE_NAME, COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='id') id 
    JOIN (SELECT COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='state') state ON id.TABLE_NAME = state.TABLE_NAME 
    JOIN (SELECT COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='pubdate') pubdate ON id.TABLE_NAME = pubdate.TABLE_NAME 
+0

不,我要找的是返回列名稱 - >默認值對,因爲它們是列...您的代碼返回行! – skyline26 2012-03-11 04:41:28

+0

使用應用程序代碼檢索行並將它們格式化爲列。否則,你可以透視它。 – 2012-03-11 04:44:18

+0

@toPeerOrNotToPeer請參閱上面的我的內容。可能的工作... – 2012-03-11 04:52:12

3

使用DESCRIBEhttp://dev.mysql.com/doc/refman/5.0/en/describe.html

DESCRIBE sometable [somefield] 

這裏是單場PHP例如:

$resource = mysql_query("DESCRIBE sometable somefield"); 

$schema = mysql_fetch_assoc($resource); 
$default = $schema['default']; 

而且這裏是幾個字段的PHP例子:

$resource = mysql_query("DESCRIBE sometable"); 

while ($schema = mysql_fetch_assoc($resource)) { 
    $default_list[$schema['Field']] = $schema['Default']; 
} 
+0

正如我所說...必須返回一個單行,其中列是表的列,並且這些值是它們的默認值 – skyline26 2012-03-11 04:43:16

+0

查看更新的變體。希望這是你所需要的。 – 2012-03-11 04:53:43

1

我看不出這樣的行爲,並發現它錯了。

使用不方便。想象一下,我想輸入自己的狀態值。我必須先刪除默認的22。
日期更糟。不是設置當前的日期時間,而是要讓我編輯整個日期。爲什麼?
而對於id這是不可能的。

爲什麼你就不能檢查輸入字段,如果是空的 - 沒有在所有插入,讓數據庫設置這些默認值

你剛纔overthinked它,我相信。

+0

我當然推翻了它。在嘗試'至少'20種不同的方法後,簡單地檢測字段是否爲空並且不在插入查詢中包含它確實是答案。我認爲它會拋出沒有默認值的列的錯誤,但唉,它沒有。謝謝! – 2012-12-16 03:58:20