我将继续发布我可怕的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)
好的,让我解释一下我在做什么。
看起来我做的事情非常糟糕,我坦率地说不知道该怎么办。我试着把它弄好,但结果却是一团糟。
我希望有人可以引导我朝着正确的方向前进,并帮助我学习(以及其他任何想要学习的人)如何做这样的事情。谢谢。
答案 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)