我想要完成的是 - 只有在高分优于当前值的情况下才更新表格。
列表 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文档,但我不太清楚。 我怎么能做到这一点?请注意,我可以使用多个查询并获取数据然后使用该数据进行更多查询来执行此操作,但我觉得这根本不是可行的方法,并且您需要几秒钟才能找到一个很棒的方法来解决问题。
非常感谢!
答案 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