Mysql:更新 column3 IF column1 已更改

标签 mysql

我有这个查询,如果 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 将运行。
希望 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}";

最佳答案

你基本上就在那里,对吧?

$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/

相关文章:

mysql - 如何形成跨两个表的查询

如果文本太长,Mysql 数据库不会保存文本

mysql - 在选择案例中使用条件 THEN 来构建 View

mysql - Grant ALL on Database 它没有向我的特定 IP 授予任何特权

php - 用于填充字母表词汇表的 MySQL 单个查询

hdfs - 使用直接导入HDFS时Sqoop找不到mysqldump

MySql 不工作。用xampp安装但现在总是显示 "loading"栏

php - laravel:JSON 字段与数组的比较

Java ResultSet 除了 sql 之外什么也没有得到 mysql 中的结果

mysql - 是触发器事务吗?