2011-03-27 63 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;