在phpmyadmin EVENT创建mysql中的每个

问题描述 投票:-1回答:2

这是我的问题:

我想改进我的数据库上的一个事件,给每个玩家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]

感谢您阅读我并尝试提供帮助。

mysql for-loop events
2个回答
0
投票

您可以一次将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来计算要添加多少。


0
投票

我不认为你需要一个循环,只需在更新语句中使用case表达式而不使用where子句:

update players set points = points + (case
                                        when points*1/200>100 then 0
                                        else (100 - (points * 1/200)) * 2 / 3
                                      end)

我还从计算中删除了一些多余的零。

© www.soinside.com 2019 - 2024. All rights reserved.