質問

私は、さまざまな世界のすべてのプレイを追跡するゲームのハイスコアデータベースを持っています。私がやりたいのは、演劇に関するいくつかの統計を見つけて、各世界の「ランク」を見つけることです。互いの世界に応じて(プレイ回数でソート)。

これまでのところ、統計はすべて正常に機能していますが、各世界のランキングを見つけるのに問題があります。

また、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top