我有这个查询,如果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的值,则会运行。
如果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}";
答案 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(零)。