2015-10-09 21 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