我已经做过一些研究,但似乎没有什么适合我的需求。我有一个数据库表,其中包含从Web服务检索的一些数据。
用户为每个记录执行一些任务,然后将其标记为“已处理”。因此,我有一个名为“processed”的附加数据库字段(不是基于我从WS获得的数据),默认情况下设置为0,而在用户完成工作后设置为1。
每天我都会检查WS,如果状态码更改,我想更新该行并将其设置回处理为0(以便用户可以再次处理)。
假设这是我的数据库...
+------+------------+-------+------------+
| id | statuscode | foo | processed |
+------+------------+-------+------------+
| 123 | 66 | bar | 1 |
+------+------------+-------+------------+
我认为在某些条件下进行重复键更新可以使其工作,也许在某些情况下或在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) ;