我正在为数据库做一些游戏而且我有一个排行榜。当用户生成特定分数并且他们不在表格中时,我想将它们添加到表格中,但是如果他们已经在表格中,我只想更新分数,如果他们的新分数低于他们的旧分数(像高尔夫,越低越好)。该表有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
,以确定用户名是否已经存在,然后从那里UPDATE
或INSERT
,但我很好奇是什么 - 这个问题的衬里看起来像。
如何修改上述行,以便在表格中已有名称时继续INSERT
,但如果UPDATE
小于@score
,则只会Value
现有{{1}}?
答案 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)
答案 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)
;