如果值大于当前值,则更新MySQL

时间:2012-04-10 00:16:53

标签: mysql

我将继续发布我可怕的MySQL代码:

INSERT INTO monthlystats (id, server, time, uptime, players, rank) 
VALUES (09126, 6, 0912, 302, 0, 1) 
ON DUPLICATE KEY UPDATE uptime = if(302 > uptime, 302, uptime), if(0 > players, 0, players), if(1 > rank, 1, rank)

好的,让我解释一下我在做什么。

  1. “id”具有唯一索引。如果该索引尚不存在,我想插入这些值。
  2. 如果有重复的密钥,我想改为更新3个字段中的每一个,只要新值大于表中当前的值。
  3. 看起来我做的事情非常糟糕,我坦率地说不知道该怎么办。我试着把它弄好,但结果却是一团糟。

    我希望有人可以引导我朝着正确的方向前进,并帮助我学习(以及其他任何想要学习的人)如何做这样的事情。谢谢。

2 个答案:

答案 0 :(得分:31)

您的查询似乎很好,但为了清晰起见,您可以改进它:

INSERT INTO monthlystats (id, server, time, uptime, players, rank) 
  VALUES (09126, 6, 0912, 302, 0, 1) 
ON DUPLICATE KEY UPDATE 
  uptime = GREATEST(uptime, VALUES(uptime)), 
  players = GREATEST(players, VALUES(players)),
  rank = GREATEST(rank, VALUES(rank))

答案 1 :(得分:6)

您可以使用VALUES函数避免一些重复。其他事情在您的查询中也很好

INSERT INTO monthlystats (id, server, time, uptime, players, rank) 
VALUES (09126, 6, 0912, 302, 0, 1) 
ON DUPLICATE KEY UPDATE uptime = if(VALUES(uptime) > uptime, VALUES(uptime), uptime)