我有一个高得分的游戏数据库,可以跟踪各种世界中的每一个游戏。我想做的是找出一些关于戏剧的统计数据,然后找出每个世界根据彼此的世界“排名”(按播放次数排序)。
到目前为止,我所有的统计数据都运行得很好,但是我在查找每个世界的排名时遇到了一个问题。
我也很确定在三个独立的查询中进行这项工作可能是一个非常缓慢的过程,而且可能会得到改进。
我有一个时间戳列(这里没有使用)和数据库模式中索引的“世界”列。以下是我的资料来源:
function getStast($worldName) {
// ## First find the number of wins and some other data:
$query = "SELECT COUNT(*) AS total,
AVG(score) AS avgScore,
SUM(score) AS totalScore
FROM highscores
WHERE world = '$worldName'
AND victory = 1";
$win = $row['total'];
// ## Then find the number of losses:
$query = "SELECT COUNT(*) AS total
FROM highscores
WHERE world = '$worldName'
AND victory = 0";
$loss = $row['total'];
$total = $win + $loss;
// ## Then find the rank (this is the broken bit):
$query="SELECT world, count(*) AS total
FROM highscores
WHERE total > $total
GROUP BY world
ORDER BY total DESC";
$rank = $row['total']+1;
// ## ... Then output things.
}
我相信让我失败的特定代码行在等级查询中,
WHERE total > $total
它是否不起作用,因为它不能接受计算汇总作为WHERE子句中的参数?
最后,有没有一种更有效的方法可以在单个SQL查询中计算所有这些内容?