現在我想創建一個遊戲的排名系統,假設針對目前排名如下片刻:有效的更新數據
player rank
A : 1
B : 2
C : 3
D : 4
E : 5
球員d後的一場比賽中擊敗了球員B,所以排名會改變如下:
player rank
A : 1
D : 2
B : 3
C : 4
E : 5
我怎麼能高效地更新mysql數據庫中的數據?
現在我想創建一個遊戲的排名系統,假設針對目前排名如下片刻:有效的更新數據
player rank
A : 1
B : 2
C : 3
D : 4
E : 5
球員d後的一場比賽中擊敗了球員B,所以排名會改變如下:
player rank
A : 1
D : 2
B : 3
C : 4
E : 5
我怎麼能高效地更新mysql數據庫中的數據?
我不是在存儲過程中的專家,但如果你創建參數「PLAYER1」和「player2」的存儲過程,其中PLAYER1是較高等級的球員,我想,這樣的事情可能工作:
# Get current player ranks
SET @player1rank = (SELECT `Rank` FROM `RankTable` WHERE `Player` = player1);
SET @player2rank = (SELECT `Rank` FROM `RankTable` WHERE `Player` = player2);
# Drop ranks for player 1 down to player 2
UPDATE `RankTable` SET `Rank` = `Rank`+1 WHERE `Rank` >= @player1rank AND `Rank` < @player2rank;
# Now update player2's rank
UPDATE `RankTable` SET `Rank` = @player1rank WHERE `Player` = player2;
作爲一個存儲過程,這將運行速度非常快 - 如果您的表增長很大,這是一個額外的優勢。
這裏是我的嘗試,它不使用phpMyAdmin(找不到版本)登記在MySQL 4.0,但它可能對MySQL的5+,並希望讓你在正確的方向前進......
DELIMITER $$
CREATE PROCEDURE rerank_players (IN player1 VARCHAR (100), IN player2 VARCHAR (100))
BEGIN
DECLARE player1rank, player2rank INT;
SET player1rank = (SELECT Rank FROM RankTable WHERE Player = player1);
SET player2rank = (SELECT Rank FROM RankTable WHERE Player = player2);
UPDATE RankTable SET Rank = Rank+1 WHERE Rank >= player1rank AND Rank < player2rank;
UPDATE RankTable SET Rank = player1rank WHERE Player = player2;
END
$$
您需要調整VARCHAR的長度在參數聲明你的數據長度以及重命名錶&領域,等等
我想你的答案,謝謝你的幫助 –
爲什麼不u有一個點系統,如足球聯賽表?然後按總和點排序 – ajreal
因此,如果一個人擊敗另一個,你需要交換隊伍? – cartina
玩家是否可以因爲任何原因降級?你的排名如何 - 按比賽次數或其他標準?我認爲總的來說,如果按照愛爾蘭人的建議計算排名,會更好。 – Revent