MySQL:在IF语句中更新多个列

时间:2015-08-23 13:54:09

标签: mysql

我正在尝试更新多个列,以防一个新值低于旧值:

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列,但如果案例不是'匹配,什么都不更新。我怎样才能使它发挥作用?

感谢。

2 个答案:

答案 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`);