さまざまな世界のすべてのプレイを追跡するゲームのハイスコアデータベースがあります。私がやりたいのは、プレイに関するいくつかの統計を見つけてから、各世界がお互いの世界に従って「ランク付け」されている場所を見つけることです(プレイされた回数でソートされています)。
これまでのところ、すべての統計が正常に機能していますが、各世界のランキングを見つけるのに問題が発生しました。
また、3つの別々のクエリでこれを行うことは、おそらくこれを実行するのに非常に遅い方法であり、おそらく改善される可能性があると確信しています。
タイムスタンプ列(ここでは使用されていません)とDBスキーマでインデックス付けされた「ワールド」列があります。これが私のソースの選択です:
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.
}
私が失敗している特定のコード行は、RANKクエリにあると思います。
WHERE total > $total
WHERE句の引数として計算された合計を受け入れることができないため、機能していませんか?
最後に、単一のSQLクエリでこれらすべてを計算するためのより効率的な方法はありますか?