2012-04-27 126 views
9

我有一個運行MySQL查詢的PHP腳本。使用IF()與MySQL中的ON DUPLICATE KEY UPDATE

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)"; 

這是我想要做的: Col1是主鍵。如果有重複,它會檢查col2的插入值是否爲空。如果不是,則會用值更新,否則值將保持不變。

此插入失敗。當我嘗試在SQLyog的手動運行(代替變量將實際值),我收到以下錯誤: 錯誤代碼: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 'IS NOT NULL.....'

我已經檢查了MySQL參考手冊的NOT IS NULL比較運算符(http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null),並且還用於INSERT ... ON DUPLICATE KEY UPDATE語法(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html),並且相信我正確使用了兩者,但顯然情況並非如此。

我在做什麼錯?

僅供參考,我使用的是MySQL 5,腳本在RHEL5服務器上運行。

回答

12

語法IS NOT NULL column是錯誤的。正確:column IS NOT NULL。我不確定這是什麼'test'。你說你想更新列或保持原樣。

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)"; 

也可以書面:

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE 
      col2 = COALESCE(VALUES(col2), col2)"; 
+0

非常感謝您的幫助!另外,'測試'的價值是一個疏忽。這是我在測試時用於col2的一個值,並且忘記將其刪除。 – 2012-04-27 17:45:59

相關問題