2011-10-12 117 views
0

以下是多人遊戲的簡單示例,其中多個遊戲在幾個賽季中播放。該遊戲 ID,玩家得分每個球員的賽季它正在播放記錄在表中。以下查詢顯示瞭如何從特定季節中玩過的所有遊戲中得出玩家排名的摘要。MySQL:從While循環中獲取查詢

SELECT game, score FROM Table WHERE name='name' AND season='season' 
ORDER BY game; 

while(Fetching Result) 
{ 
SELECT COUNT(*) AS 'total', 
    SUM(CASE WHEN score>='score' THEN 1 ELSE 0 END) AS 'rank' 
    FROM Table WHERE game='game' AND season='season'; 
} 

輸出包含遊戲得分排名從玩家在特定的季節,ORDER BY game玩過的所有遊戲。我想知道是否有更有效的方法來做到這一點,而不是使用while循環。

回答

0

對不起,我第一次發佈時被列名稱弄糊塗了。在查詢本身中,你無法做出很多優化,因爲第二次你想獲取關於遊戲的數據,而不是你想要排名的玩家。您可以將它們作爲子查詢/連接添加到第一個查詢,但第二個查詢可以處理多個行,因此可以完成此操作,但會導致返回其他行。

當檢索這些數據時,讓事情更快地工作的一種方法是在數據庫中添加新信息 - 每個玩家的遊戲和遊戲中的總參與者的等級。您可以在遊戲結束後立即計算這個值,就像現在使用第二個查詢一樣,並將結果保存在某個可以更快訪問它們的地方,而無需在每次需要時計算信息。

+0

你能說明如何計算總數嗎?這裏的總數是指每場比賽的總排名。 –

+0

我認爲這不是我想要的。在你的情況下,沒有實際的玩家排名。 –

+0

對不起,我被列名弄糊塗了,我編輯了我的答案。希望有所幫助。 – Nikoloff