2011-03-27 62 views
5

我不知道我該如何解釋它,可能是這個示例垃圾查詢可以提供幫助。查詢以檢查字段是否存在,然後返回結果集

SELECT if_exists(Fieldname) * FROM my table name 

我試圖選擇只有Fieldname字段存在的數據庫的所有行。

你能幫我

+0

我不明白你的意思。你能澄清嗎? – 2011-03-27 10:07:16

+0

@Pekka,請參閱解釋 – mrN 2011-03-27 10:14:49

+0

@downvoter,請您澄清downvote? – mrN 2011-03-28 07:54:18

回答

4
SHOW columns from `yourtable` where field='yourfield' 

你會得到一個空行,如果你沒有在表中字段。

+0

如果該字段是動態生成的,這不會普遍解決問題。 – Ray 2014-02-19 21:59:05

0
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = ‘you_table_name’ AND COLUMN_NAME = ‘FIELDNAME’) 
BEGIN 
    select fieldname from your_table_name 
END 
+0

這個查詢出錯了 – mrN 2011-03-27 10:13:55

+0

你得到了什麼錯誤 – Blackcom 2011-03-27 15:38:14

+0

未定義列 – mrN 2011-03-28 07:54:57

0

你需要這樣的事情。對不起,不能測試語法是否正常。

SELECT * FROM table WHERE EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=table AND column_name=column) 
0

這就是我使用的查詢:如果列不存在,它將不返回任何列。 爲了您的需要,它不應該做太多的工作來改變它。

SET @VAR_SQL := Concat('SELECT first_row',CONCAT(IFNULL((SELECT CONCAT(',',COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'my_table' 
AND COLUMN_NAME = 'my_column'),'')),' FROM my_table;'); 
PREPARE QUERY_STATEMENT FROM @VAR_SQL; 
EXECUTE QUERY_STATEMENT; 
2

純PHP下面的代碼應該很好地工作:

$chkcol = mysql_query("SELECT * FROM `table_name` LIMIT 1"); 
$mycol = mysql_fetch_array($chkcol); 
if(isset($mycol['column_name'])) 
    $results = mysql_query("SELECT * FROM `table_name`"); 
else 
    $results = false;