我已经做过一些研究,但似乎没有什么适合我的需求。我有一个数据库表,其中包含从Web服务检索的一些数据。

用户为每个记录执行一些任务,然后将其标记为“已处理”。因此,我有一个名为“processed”的附加数据库字段(不是基于我从WS获得的数据),默认情况下设置为0,而在用户完成工作后设置为1。

每天我都会检查WS,如果状态码更改,我想更新该行并将其设置回处理为0(以便用户可以再次处理)。

假设这是我的数据库...

+------+------------+-------+------------+
| id   | statuscode | foo   | processed  |
+------+------------+-------+------------+
| 123  | 66         | bar   | 1          |
+------+------------+-------+------------+
  • 如果不存在具有相同键(id)的行,我想插入一条新记录。
  • 如果存在具有相同键和'foo'更改的行,我想更新除'processed'字段以外的任何值。
  • 如果存在具有相同键和状态码更改的行,我想更新任何值并将其设置为0。

  • 我认为在某些条件下进行重复键更新可以使其工作,也许在某些情况下或在IF条件下...我错了吗?任何建议都很好,在此先谢谢您!

    最佳答案

    这样的事情(警告:不注意NULL值):

    INSERT INTO tableX
      (id, statuscode, foo, processed)
    VALUES
      (?, ?, ?, DEFAULT)
    ON DUPLICATE KEY UPDATE
      processed = CASE WHEN statuscode <> VALUES(ststuscode)
                         THEN 0
                       ELSE processed
                  END
    , statuscode = VALUES(statuscode)
    , foo = VALUES(foo) ;
    

    10-05 21:49