具有多个字段的Sql查询中的IF语句

时间:2013-10-10 23:45:00

标签: mysql sql if-statement

我想要完成的是 - 只有在高分优于当前值的情况下才更新表格。

列表 userId highScore 某事 dateLastPlayed

userId 为1的用户击败了他自己的分数,在这种情况下,我想更新该行中的所有字段。如果他没有击败自己的高分,我只想更新 dateLastPlayed 字段。

这是我到目前为止插入内容的方式

INSERT INTO table VALUES ('$userId', '$highScore', '$something', '$dateLastPlayed') ON DUPLICATE KEY UPDATE highScore='$highScore', something='$something', dateLastPlayed='$dateLastPlayed'

请注意,userId具有唯一键。

此工作正常但每次都会更新 highScore 某些 dateLastPlayed 字段。 只有当变量$ highScore大于数据库中当前设置的变量时,我才想更新字段 highScore 某些

我已阅读过MySQL文档,但我不太清楚。 我怎么能做到这一点?请注意,我可以使用多个查询并获取数据然后使用该数据进行更多查询来执行此操作,但我觉得这根本不是可行的方法,并且您需要几秒钟才能找到一个很棒的方法来解决问题。

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果你想在一个SQL中完成它,它将是:

INSERT INTO table VALUES ('$userId', '$highScore', '$something', '$dateLastPlayed') 
ON DUPLICATE KEY 
UPDATE 
    highScore=
        case 
            when highScore >= $highScore then highScore
            else '$highScore'
        end,
    something=
        case 
            when highScore >= $highScore then something
            else '$something'
        end,
    dateLastPlayed ='$dateLastPlayed'

与多语句相比,这种缺点是业务逻辑在数据库/ SQL端。就个人而言,我更喜欢将代码中的业务逻辑保存在一个地方,以便以后更容易维护。

答案 1 :(得分:0)

向WHERE子句添加条件:

update mytable set
highScore = $highScore,
something = $something
where userid = $userid
and highScore < $highScore -- only update if new high score exceeds existing