Mysql:UPDATE column3 IF column1已更改

时间:2015-10-09 08:07:46

标签: mysql

我有这个查询,如果INT我将DUPLICATE KEY增加为1。

$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的值,则会运行。
如果coulmn3column1希望column2增加没有改变到新的价值观。

我该如何解决?

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

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

1 个答案:

答案 0 :(得分: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

这可以通过将column3设置为IF()语句的结果来实现,就像之前提议的那样。

IF(condition, trueResult, falseResult)

因此,我们检查是否有任何更改,如果没有任何更改,则返回相同的column3(无更改),否则返回+1

注意我已经交换了条件语句的逻辑 - 您正在检查两个列是否已更改(但已声明更改应影响column3)。此外,UPDATE首先专门处理column3 - 否则其他列已经更新,无法与之进行比较。)

还要确保第3列的架构的默认值为0(零)。