这是我的问题:
我想改进我的数据库上的一个事件,给每个玩家1分。
这很棒,但我想按比例进行,以便20000的玩家获得0分,10000的玩家比0的玩家少50%。
该公式已经制定。
所有我需要的是每个人,我不能这样做,因为我不习惯phpmyadmin中的事件。
[...]是我需要帮助的部分。
它是 :
[FOR EACH ROW in player SET @id = playerid]
SET @points = SELECT points FROM player WHERE playerid = @id
IF ( @points * 100 / 20000 > 100 )
THEN
SET @earn = 0
ELSE
SET @pourcent = @points * 100 / 20000
SET @pourcentmanque = 100 - @pourcent
SET @earn = @pourcentmanque * 20 / 30
END
UPDATE player SET points = points + @earn WHERE playerid = @id
[END FOR]
感谢您阅读我并尝试提供帮助。
您可以一次将UPDATE应用于多行。
Shadow的评论建议使用case
表达式。这是它的外观:
UPDATE player
SET points = points +
CASE
WHEN points * 100 / 20000 > 100
THEN 0
ELSE (100 - (points * 100 / 2000)) * 20 / 30
END;
请注意,特定的playerid没有WHERE子句。这意味着UPDATE将应用于所有playerid。该表达式将使用每个相应玩家的当前points
来计算要添加多少。
我不认为你需要一个循环,只需在更新语句中使用case
表达式而不使用where子句:
update players set points = points + (case
when points*1/200>100 then 0
else (100 - (points * 1/200)) * 2 / 3
end)
我还从计算中删除了一些多余的零。