Upsert总是插入但有条件地更新?

时间:2015-09-17 14:21:49

标签: mysql

我正在为数据库做一些游戏而且我有一个排行榜。当用户生成特定分数并且他们不在表格中时,我想将它们添加到表格中,但是如果他们已经在表格中,我只想更新分数,如果他们的新分数低于他们的旧分数(像高尔夫,越低越好)。该表有3列:Name,Value和EntryTime。名称是KEY。

目前我无条件地与

进行了喋喋不休
INSERT INTO BasicEntries (Name, Value, EntryTime) VALUES (@name, @score, NOW()) ON DUPLICATE KEY UPDATE `Value` = @score, `EntryTime` = NOW();

我尝试在最后添加WHERE,但我一直收到有关我的SQL语法的错误。我可以将逻辑拆分为SELECT,以确定用户名是否已经存在,然后从那里UPDATEINSERT,但我很好奇是什么 - 这个问题的衬里看起来像。

如何修改上述行,以便在表格中已有名称时继续INSERT,但如果UPDATE小于@score,则只会Value现有{{1}}?

2 个答案:

答案 0 :(得分:1)

WHERE中的UPDATE语句不允许

MySQL。但是,您可以使用IF

你做的事情如下:

INSERT INTO table
 A=aa, 
 B=bb, 
 C=cc 
ON DUPLICATE KEY UPDATE
 A = IF( D = dd, aa, A),
 B = IF( D = dd, bb, B),
 C = IF( D = dd, cc, C)

检查链接: Control Flow Funtions - If

答案 1 :(得分:0)

这意味着你:

INSERT INTO BasicEntries (Name, Value, EntryTime)
VALUES (@name, @score, NOW()) 
ON DUPLICATE KEY UPDATE 
  `EntryTime` = if(@score > value, NOW(), EntryTime), 
  `Value` = if(@score > value, NOW(),EntryTime)
;