2011-10-12 87 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