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

fru*_*cup 17 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)
Run Code Online (Sandbox Code Playgroud)

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

  1. "id"具有唯一索引.如果该索引尚不存在,我想插入这些值.
  2. 如果存在重复键,我想改为更新3个字段中的每个字段,只要新值大于表中当前的值.

看起来我做的事情非常糟糕,我坦率地说不知道该怎么办.我试着把它弄好,但结果却是一团糟.

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

ype*_*eᵀᴹ 33

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

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))
Run Code Online (Sandbox Code Playgroud)

  • "最棒的"和"最少的" - 这是我一直忘记的;-) +1 (2认同)

zer*_*kms 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)
Run Code Online (Sandbox Code Playgroud)