mysql if语句确定表

时间:2014-12-19 07:30:21

标签: mysql mysqli

我想知道我是否可以使用MySQL IF来选择要更新的表。我正在尝试这样的事情:

UPDATE IF(:listId = 'global', `profanity`,`accountProfanity`) SET `active` = IF(`active` = 1,0,1) WHERE `id` = 1

:listId可以是字符串global或数字。 当:listId是数字时,我想更新表profanity,否则,我想更新accountProfanity。 当我运行此查询时,我得到了这个结果:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF('global' = 'global', `profanity`,`accountProfanity`) SET `active` = IF(`activ' at line 1

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用预准备语句:

SET @id = 1;    
SET @table_name = IF(:listId = 'global', `profanity`,`accountProfanity`);
SET @update_query = CONCAT('UPDATE ', @table_name, '
                              SET active = IF(active = 1,0,1) 
                                WHERE id = ', @id);
PREPARE stmt FROM @update_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;