2017-04-20 77 views
-1

這裏是我的問題:每個在phpmyadmin EVENT創建mysql

我想改善我的數據庫,讓每個玩家1點的事件。

這是偉大的,但我想這樣做pro​​portionnally使之與像20000賺取0分的球員,並與10000玩家賺取比球員少50%與0

的公式已經作出。

我所需要的全部是每個,我不能這樣做,因爲我不習慣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] 

感謝您閱讀我,並試圖幫助。

+0

我不確定你需要一個循環,你也可以在更新中使用'case'表達式。但請檢查遊標。 – Shadow

+0

一個案例的表達?每個%? X)我不知道我的理解:/ 我試圖用互聯網我創辦但每次失敗:( 他們exemples不會爲phpMyAdmin的事件系統進行時間上的幾個exemples 如果你有。一個與phpmyadmin事件系統一起工作的光標例子,我會很樂意嘗試去適應它:) –

+0

請參閱下面的答案。我們都提出了同樣的問題:沒有循環,只是一個帶有case表達式的更新語句。爲了得到一個使用遊標的例子,一個快速的谷歌搜索將會幫助你很多。 – Shadow

回答

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

是的我認爲沒有適當的時候與ID它會給每個人一個通用的點數多次x) 謝謝 –

0

我不認爲你需要爲這個循環,只需使用UPDATE語句的case表達沒有任何where子句:

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

我也刪除從計算的一些多餘的零。

+0

哦謝謝你!我確信像這樣的一些命令會給每個玩家多2000次x) –

+0

如果我們爲你解決了問題,那麼接受其中一個答案作爲解決方案,不要簡單地改變標題。 – Shadow

+0

(如果我需要更改參數,「多餘」零點用於特定的數量和時間轉換) 綠色檢查選項尚不可用。我所有的是最喜歡的明星。我改變了標題,所以沒有其他人會回答它沒有... 沒有必要生氣,給我一個壞名聲:( –