MySQL-クエリを最適化し、列の合計に基づいてランクを見つける
-
03-07-2019 - |
質問
私は、さまざまな世界のすべてのプレイを追跡するゲームのハイスコアデータベースを持っています。私がやりたいのは、演劇に関するいくつかの統計を見つけて、各世界の「ランク」を見つけることです。互いの世界に応じて(プレイ回数でソート)。
これまでのところ、統計はすべて正常に機能していますが、各世界のランキングを見つけるのに問題があります。
また、3つの個別のクエリでこれを行うことは、おそらくこれを実行するのに非常に遅い方法であり、おそらく改善される可能性があると確信しています。
タイムスタンプ列(ここでは使用していません)と" world" 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クエリで計算するより効率的な方法はありますか?
解決
「合計を持つ> $ total '?
SELECT world, count(*) AS total
FROM highscores
GROUP BY world
having total > $total
ORDER BY total DESC
所属していません StackOverflow