【问题标题】:ON DUPLICATE KEY UPDATE only if second condition trueON DUPLICATE KEY UPDATE 仅当第二个条件为真时
【发布时间】:2014-07-09 11:03:26
【问题描述】:

只有在第二个条件为真时我才如何更新,似乎我的 mysql 版本不允许在 ON DUPLICATE 语法末尾使用 WHERE。

INSERT INTO `proxies` (`proxy`,`response`,`PAYMENT`,`type`,`country`,`status`,`tier`,`last_checked`,`last_active`,`response_time`) 
VALUES ('111.9.204.96:8123','200','coolproxies','anon','China','active','3','1400624136','1400624136','1.577639') 
ON DUPLICATE KEY UPDATE `response`='200',`response_time`='1.577639',`type`='anon',`country`='China',`status`='active',`tier`='2',`last_checked`='1400624137'

这没问题,但我只需要在WHERE last_checked < '1400624137' 为真时更新。

这就是执行此操作的查询的样子。

INSERT INTO `proxies` (`proxy`,`response`,`PAYMENT`,`type`,`country`,`status`,`tier`,`last_checked`,`last_active`,`response_time`)
VALUES ('207.204.249.193:21320','200','scanner','anon','United States','active','1','1400633866','1400633866','1.59696')
ON DUPLICATE KEY UPDATE
`response_time` = IF(`last_checked` < '1400633866', '1.59696', `response_time`),
`status` = IF(`last_checked` < '1400633866', 'active', `status`),
`last_checked` = IF(`last_checked` < '1400633866', '1400633866', `last_checked`),
`last_active` = IF(`last_checked` < '1400633866', '1400633866', `last_active`);

【问题讨论】:

    标签: mysql


    【解决方案1】:

    @GordonLinoff 提到的在 2 个查询中执行此操作的替代方法是使用this related question 中描述的方法,您可以使用IF 根据条件进行更新。

    INSERT INTO `proxies` (...) 
    VALUES (...) 
    ON DUPLICATE KEY UPDATE
      my_column = IF(last_checked < '1400624137', VALUES(my_column), my_column)
    

    IF 所做的基本上是当 TRUE 时将字段更新为新值,否则如果 FALSE 将其设置为当前值,这意味着不会更改现有数据。

    【讨论】:

      【解决方案2】:

      我认为你需要做两个陈述:

       update . . . 
       where last_checked < '1400624137';
      
       insert ignore into proxies(. . .);
      

      (或使用on duplicate key update 什么都不做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2014-03-10
        • 2011-05-16
        相关资源
        最近更新 更多