2015-10-09 22 views
1

我有這個疑問,我增加INT 1如果DUPLICATE KEY
MySQL的:UPDATE欄3如果column1爲改變

$query = "INSERT INTO table(
        column1, 
        column2) 
      VALUES(
        value1, 
        value2) 
      ON DUPLICATE KEY UPDATE 
        column1 = VALUES(column1), 
        column2 = VALUES(column2), 
        column3 = column3+1"; //HERE!!! 

Column1是UNIQUE。因此,如果DB UPDATE中存在column1的值,則會運行。
我做希望coulmn3增加,如果column1column2並沒有改變,以新的價值觀。

我該如何解決這個問題?

... 
ON DUPLICATE KEY UPDATE 
    column1 = VALUES(column1), 
    column2 = VALUES(column2), 

//Something like this 
IF (column1 != VALUES(column1) && column2 != VALUES(column2){ 
    column3 = column3+1}"; 

回答

1

你基本上是對的嗎?

$query = <<<SQL 
INSERT INTO targetTable(col1, col2) 
VALUES(2, 3) 
ON DUPLICATE KEY UPDATE 
    col3 = IF(
     col1 = VALUES(col1) AND col2 = VALUES(col2), 
     col3, 
     col3 + 1 
    ), 
    col1 = VALUES(col1), 
    col2 = VALUES(col2) 
; 
SQL; 

SQLFiddle演示:http://sqlfiddle.com/#!9/70fdea/1

這是通過設置column3IF()語句的結果,就像你之前提出。

IF(condition, trueResult, falseResult)

因此,我們檢查,如果事情已經改變,返回相同的column3(無變化)如果什麼也沒有改變,否則+1

注意我已經交換了條件語句的邏輯 - 您正在檢查這兩列列已更改(但表示要麼更改應影響column3)。另外,UPDATE專門處理column3第一 - 否則其他列已經更新,並不能對抗相提並論)

另外,請確保您的架構爲0(零)列3.

+0

我的默認值。會給這個嘗試。謝謝。什麼是「<<< SQL」? –

+0

<<< SQL是「heredoc」格式 - 它(IMHO)非常適合像SQL這樣的字符串(文本)塊。如果您使用以下特定格式,某些編輯甚至會突出顯示SQL:http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc – wally

+0

我剛剛意識到我的語法是有效的 - 但結果將是錯誤的...我會更新,對此感到遺憾。 – wally