我正在開發一款具有多種遊戲的應用程序,並且應該能夠處理數百萬玩家。每個遊戲都需要一個排行榜,並且必須能夠顯示玩家的當前位置和前10名玩家,以及玩家朋友的位置。遊戲排行榜的數據庫方法
目前我正在使用兩個表格。
user_score
- ID
- USER_ID
- game_id
- 得分
- created_at
用戶_ MAX_SCORE
- ID
- USER_ID
- game_id
- MAX_SCORE
- created_at
- 的updated_at
每當用戶播放首次數據的任何遊戲被插入在第一和第二表。如果用戶第二次玩並且得分高於他們以前的得分,我們將數據插入到user_score表中,並用新的max_score更新user_max_score表。
而爲了獲得用戶的排名我這樣開火查詢。
SET @i=0;
SELECT id, user_id, max_score, @i:[email protected]+1 AS rank
FROM user_max_score WHERE game_id = $gameId
ORDER BY max_score DESC, updated_at ASC;
有沒有比這更好的方法?
下降了'user_max_score'表,這樣做'選擇USER_ID,MAX(分數)AS MAX_SCORE FROM user_score GROUP BY user_id'(見http://stackoverflow.com/questions/7745609/sql-select-僅-行與 - 最大 - 值上一列) – AmazingDreams