2015-09-17 30 views
0

我正在做一個遊戲的數據庫,我有一個排行榜。當用戶生成特定分數並且他們不在表格中時,我想將它們添加到表格中,但是如果它們已經在表格中,我只想更新分數,如果它們的新分數低於它們的分數老得分(比如高爾夫,越低越好)。該表有3列:名稱,值和EntryTime。名字是關鍵。始終插入但有條件更新的Upsert?

目前我與

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

我試着加入WHERE到年底無條件upserting但我不斷收到有關自己的SQL語法錯誤。我可以將邏輯分成SELECT,它確定用戶名是否已經存在,然後從那裏獲得UPDATEINSERT,但我很好奇這個問題的單線程是什麼樣子。

如何修改上述行,以便它繼續INSERT時的名字是不是已經在表中,但只會UPDATE如果@score小於現有Value

回答

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

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) 
;