2013-12-09 54 views
0

我有一個高分(高分)系統,它是根據玩家的體驗計算位置。 但現在我需要在其他地方使用玩家的排名,比如網絡中的更多地方,比如個人 高分,並且它會顯示玩家在該技能中的排名。高分(最高分數)排名計算和更新查詢?

因此只是循環播放循環&像rank ++將不會真的工作,因爲我需要保存其他地方 排名。

我可以做的是loop通過所有玩家,然後發送查詢更新該玩家的等級,但如果我有1000玩家?或者更多? 這意味着每個負載的查詢爲1000

我曾經想過,如果有可能是一個SQL查詢我可以用來做同樣的動作,在一個或兩個查詢。

我該怎麼做?我計算由玩家的eperience訂購行列,所以我結構如下:

表:

  • 玩家

    ID(AUTO_INCREMENT)整數(255)

    DisplayName的VARCHAR(255)獨特

    排名整數(255),默認爲空

    經驗BIGINT(255)

+0

顯示從那裏要提取軍銜原始表的結構,你有你的用戶 –

+0

@FilipeSilva不知道你想要的結構表,但如果它幫助我編輯它。 –

回答

2

這應該給你一個id爲用戶等級= 1。如果你想每一個球員,只是刪除WHERE子句:

SELECT a.id, a.displayname, a.rank, a.experience 
FROM ( 
    SELECT id, displayname, @r:[email protected]+1 AS rank, experience 
    FROM players, (SELECT @rank:=0) tmp 
    ORDER BY experience DESC) a 
WHERE a.id = 1 

我不會在球員排名表直接,因爲這將意味着,你將不得不在用戶每次變化經歷時間來重新計算。你可以在任何時候執行這個查詢來獲得玩家或排行榜的排名。

如果你仍想更新它,你可以做一個INNER JOIN與此查詢更新原始表與此查詢的排名。

+0

出於某種原因,它不能正常工作。我有2個用戶,1個用2147 xp,1用5 xp,2147 xp的用戶是2級,另一個是1級? –