我正在尝试更新多个列,以防一个新值低于旧值:
INSERT INTO `toptimes`.`$enc` (serial,name,time,date,tag) VALUES ('$serial','$name','$time','$date','$tag') ON DUPLICATE KEY UPDATE IF(`time` > '$time',(`time` = '$time',`name`='$name'));
问题出现了,我需要这样做:
ON DUPLICATE KEY UPDATE IF(`time` > '$time',(`time` = '$time',`name`='$name'));
因此,如果新的$time
值低于旧的time
,请更新2列:更新time
并更新name
列,但如果案例不是'匹配,什么都不更新。我怎样才能使它发挥作用?
感谢。
答案 0 :(得分:2)
您可以在case
中使用on duplicate key part
个表达式。你只需要重复逻辑:
INSERT INTO `toptimes`.`$enc` (serial, name, time, date, tag)
VALUES ('$serial', '$name', '$time', '$date', '$tag')
ON DUPLICATE KEY UPDATE
time = least(time, values(time)),
name = (case when values(time) < time then values(name) else name end);
答案 1 :(得分:0)
通过将time
更新移至结尾来修复此问题:
INSERT INTO `toptimes`.`$enc` (serial,name,time,date,tag) VALUES ('$serial','$name','$time','$date','$tag') ON DUPLICATE KEY UPDATE name = (CASE WHEN '$time' < `time` THEN '$name' ELSE `name` END), time = LEAST('$time',`time`);