[英]PHP/SQL - Recursively downing SQL values regarding a huge amount and a max quota
我目前正在使用SVG,JQuery / Ajax,PHP和SQL開發基於Web的瀏覽器游戲,但遇到了問題:
遞歸影響的值:-75(健康點)我的值介於1到50(健康點)之間。
例如(ID |健康點):
1 | 50
2 | 1
3 | 25
4 | 4
5 | 16
我想要在SQL中,沒有任何PHP while(),將我的數據從最低的HP值組織到最高的值,以達到以下目的:
2 | 1
4 | 4
5 | 16
3 | 25
1 | 50
然后,遞歸地減去值而不會變成負值。 范例:
2 | 0 (74 hp to subtract left)
4 | 0 (70 hp to subtract left)
5 | 0 (54 hp to subtract left)
3 | 0 (29 hp to subtract left)
1 | 21 (0 hp to subtract left)
最后一個條件是使每個“字符”都失去一個“極限” hp。 例如,如果我要減去100馬力介於1到200之間的玩家的2000馬力。 每個角色損失的“限制器”為2000/100 = 20 hp最大。 但是這個數字必須在每次減法時更新。 這意味着,在此示例中,如果2個玩家剩余700 hp,則限制器將為350。
但是我不知道該怎么做。 可能嗎 ? 最簡單的方法是做一個簡單的PHP,但行數卻超過2k,我深信這不是最好的方法。
您似乎想要累加和減。 一種方法使用變量:
select t.*, (@sum := @sum + points) as running_sum
from (select t.*
from t
order by t.points asc
) t cross join
(select @sum := 0);
然后,您需要與-75的差,所以類似:
select t.*,
greatest((@sum := @sum + points) - 75, 0) as your_value
from (select t.*
from t
order by t.points asc
) t cross join
(select @sum := 0);
注意:該語法在MySQL 8+中更加簡潔:
select t.*,
greatest(sum(points) over (order by points asc) - 75, 0) as your_value
from t;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.