我有这个查询,如果 DUPLICATE KEY
,我将 INT
增加 1。
$query = "INSERT INTO table(
column1,
column2)
VALUES(
value1,
value2)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1),
column2 = VALUES(column2),
column3 = column3+1"; //HERE!!!
第 1 列是唯一的。因此,如果数据库中存在 column1 的值,UPDATE
将运行。
我不希望 coulmn3
在 column1< 时增加
和 column2
没有更改为新值。
我该如何解决?
...
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1),
column2 = VALUES(column2),
//Something like this
IF (column1 != VALUES(column1) && column2 != VALUES(column2){
column3 = column3+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(条件, trueResult, falseResult)
因此我们检查是否有任何变化,如果没有变化则返回相同的 column3
(无变化),否则返回 +1
。
请注意,我已经交换了您的条件语句的逻辑 - 您正在检查两个 列是否已更改(但已声明任何更改都应影响 column3
)。此外,UPDATE
首先专门处理 column3
- 否则其他列已经更新,无法进行比较。)
还要确保您的架构的第 3 列的默认值为 0(零)。
关于Mysql:更新 column3 IF column1 已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033103/