是否可以将重复键连接到另一个语句。
我刚刚为示例选择了一些整数(4=4)
。在实际代码中,我试图比较两个日期,并且只有当数据库行中的日期大于php生成的日期和重复密钥时,才应将unj
更新为7
。
来自:
$sql="INSERT INTO mutable (hid, xsn, unj, for, datetime)
VALUES ('$hid', '$xsn', '$unj', '$for', now()) ON DUPLICATE KEY UPDATE unj=7";
到此:
$sql="INSERT INTO mutable (hid, xsn, unj, for, datetime)
VALUES ('$hid', '$xsn', '$unj', '$for', now()) ON 4=4 AND DUPLICATE KEY UPDATE unj=7";
( ON 4 = 4 AND )已添加。
但这不起作用。有没有办法存档?
谢谢。
编辑:我知道我可以使用SELECT然后使用INPUT或UPDATE对此进行存档,但我需要更高效的代码。
答案 0 :(得分:6)
INSERT INTO mutable (hid, xsn, unj, `for`, datetime)
VALUES ('$hid', '$xsn', '$unj', '$for', now())
ON DUPLICATE KEY UPDATE unj = IF(datetime > VALUES(datetime), 7, unj)
我对此进行了测试,但确实有效。
VALUES(datetime)
是指您尝试插入datetime
列的值。这是一种在ON DUPLICATE KEY UPDATE
子句中重复值的便捷方式,无需在查询中将其写入两次。
如果IF()
中的条件返回false,则默认设置为unj = unj
,这意味着无操作。
PS:for
是MySQL reserved word,因此需要分隔。避免使用该列名称会更简单。