1
我正在製作一款遊戲,我需要一個排名系統。我已經用MySQL保存了所有的統計數據,例如殺死,死亡,勝利,無辜的鏡頭等等。對於我如何能夠對每個人進行排名,我一無所知。我想通過MySQL獲得它,但它們會很快更新。我以爲我可以在遊戲開始的時候在HashMap中加載所有的等級,但由於有成千上萬的玩家,所以這會非常無效。我也想用大部分統計數據來解決這個問題。有人可以向我解釋我將如何做到這一點?謝謝!Java&MySQL-排名
我正在製作一款遊戲,我需要一個排名系統。我已經用MySQL保存了所有的統計數據,例如殺死,死亡,勝利,無辜的鏡頭等等。對於我如何能夠對每個人進行排名,我一無所知。我想通過MySQL獲得它,但它們會很快更新。我以爲我可以在遊戲開始的時候在HashMap中加載所有的等級,但由於有成千上萬的玩家,所以這會非常無效。我也想用大部分統計數據來解決這個問題。有人可以向我解釋我將如何做到這一點?謝謝!Java&MySQL-排名
一種方法是使用mysql事件觸發存儲過程。存儲過程將執行排名並將排名存儲在數據庫中。然後你可以將事件觸發時間設置爲任何你想要的,比如10分鐘。
MySQL的事件:https://dev.mysql.com/doc/refman/5.7/en/events.html
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
然後你會設置一個存儲過程,生成排名,並將其設置爲你的球員:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html
的一個示例過程將是:
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
您可以根據需要使程序儘可能複雜。
當用戶查詢排名時,爲什麼不實時計算排名並將其顯示回給用戶? – Blip
在同一時間會出現很多遊戲,所以我需要使用MySQL,因此沒有人獲得相同的排名。 – InfIV
爲什麼不使用* TimeStamp *來聲明「的排名爲:」。這將消除同一用戶有不同等級的問題。 –
Blip