在SQL中更新或插入高分

时间:2011-11-27 17:44:26

标签: mysql sql

过去几天我一直在讨论这个问题,我不确定是否可能,但我想在这里问。

如果你的分数更高,单个SQL语句是否可以更新高分,或者如果你的第一个分数,是否可以插入它?

我的分数表有一个UserID,Level和Score列,我喜欢它遵循以下逻辑:

  • 如果您的新分数高于此级别的最后分数,请将其替换。
  • 如果您没有此级别的分数,请添加它。
  • 如果此级别的分数低于此级别的最高分,则不执行任何操作。

这可能在一个SQL语句中,还是我必须使用两个,一个是否有新的高分,如果是,请替换它?对于每个级别,每个UserID在表格中只有一个分数。

我正在使用MySQL。

更新

根据以下答案,以下SQL工作:

INSERT INTO Scores SET UserID = 'user', Level = 'level', Score = 'score'
    ON DUPLICATE KEY UPDATE Score = IF (Score < 'score', 'score', Score)  

我的表已定义,因此UserID和Level都是键。

2 个答案:

答案 0 :(得分:1)

您需要使用:INSERT ... ON DUPLICATE KEY UPDATE语法

site显示使用IF语句代替WHERE来完成仅在更高时更新分数。

INSERT INTO Scores
SET UserID = 'user'
   , Level = 'level'
   , Score = 'score'
ON DUPLICATE KEY UPDATE
   Score = IF (Score < 'score', 'score', Score)

答案 1 :(得分:0)

抱歉,你需要两个陈述。有些人会建议REPLACE INTO,但这不会解决您的问题,因为REPLACE INTO会在再次添加之前删除该行(如果存在)。因此,您将失去原始分数。您将无法使用REPLACE INTO增加分数。

编辑:也就是说,如果你还没有内存中的分数。但是我不建议通过在应用程序内存中选择数据,递增它,然后更新表来增加操作,因为你可能会无意中以这种方式引起竞争条件。

编辑#2:实际上the guy above me只是链接到我不知道的一些功能。如果您使用的是唯一键,这将对您有用。