过去几天我一直在讨论这个问题,我不确定是否可能,但我想在这里问。
如果你的分数更高,单个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都是键。
答案 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只是链接到我不知道的一些功能。如果您使用的是唯一键,这将对您有用。