我有一个包含3个字段的示例表,其中adhex是主键。目前我正在使用ASP和记录集,它非常慢,需要转移到PHP和更快的系统。我被推荐INSERT ... ON DUPLICATE KEY UPDATE,效果很好!
但是我希望更新是有条件的,无法解决!
到目前为止,我有以下根本不起作用!
我需要发生的是更新只在值中的mtime是>时才更新reg和mtime。表中的一个。我确信这是一个简单的例子,但即使看一些例子,我也无法解决条件部分。
INSERT INTO testTable (adhex,reg,mtime)
VALUES ('00B0BA','reg-1','1294129605')
ON DUPLICATE KEY UPDATE reg='ZsS-SLD'
CASE
WHEN mtime < values(mtime) THEN values(mtime)
END
答案 0 :(得分:2)
仔细查看INSERT ... ON DUPLICATE
的语法。 ON DUPLICATE KEY UPDATE
后出现一系列列 = 表达式语句。尝试类似:
INSERT INTO testTable (adhex,reg,mtime)
VALUES ('00B0BA','reg-1','1294129605')
ON DUPLICATE KEY UPDATE reg=IF(mtime < VALUES(mtime), 'ZsS-SLD', reg),
mtime=IF(mtime < VALUES(mtime), VALUES(mtime), mtime)
答案 1 :(得分:1)
这不是CASE
的工作方式。它返回一个值,而不是一段SQL代码。
Insert into testTable (adhex,reg,mtime)
VALUES ('00B0BA','reg-1','1294129605')
ON DUPLICATE KEY UPDATE reg=/*'ZsS-SLD'*/ CASE -- Note the commented out value
WHEN mtime < values(mtime) THEN values(mtime)
-- Notice there's not ELSE: you'll get NULL if condition is not matched
END