2014-12-19 4 views
0

MySQL IF를 사용하여 업데이트 할 테이블을 선택할 수 있는지 궁금합니다. 나는 이런 식으로 뭔가를 시도하고있다 :테이블을 결정하는 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 

이 작업을 수행하는 또 다른 방법이 있나요?

+0

당신이에서 listId의 값을 받고 어디? –

+0

함수 호출. 그러나 그것은 내가 생각하는 것과 관련이 없습니다. 매개 변수는 PDO SQL에 의해 올바르게 추가됩니다. MySQL이 IF 문을 실행하지 못합니다 – SheperdOfFire

답변

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; 
+0

이 코드를 어디에 포함 시킬지 OP에 조언하십시오. –