Frage

Ich habe eine hohe Punktzahl Datenbank für ein Spiel, das jedes Spiel in einer Vielzahl von Welten verfolgt. Was ich tun möchte, ist, einige Statistiken über die Spiele erfahren, und dann finden, wo jeder Welt „Reihen“ nach jeder anderen Welt (sortiert nach Anzahl, wie oft gespielt).

Bisher habe ich habe all meine Statistiken arbeiten gut, aber ich habe auf ein Problem stößt das Ranking jeder Welt zu finden.

Ich bin auch ziemlich sicher, dass dies zu tun in drei separaten Abfragen ist wahrscheinlich ein sehr langsamer Weg, um darüber zu gehen und wahrscheinlich verbessert werden könnte.

Ich habe eine Timestamp-Spalte (nicht benutzte hier) und die „Welt“ Spalte in dem DB-Schema indiziert. Hier ist eine Auswahl meiner Quelle:

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.
}

ich die spezifische Codezeile glaube, dass ich versagt ist in der RANK-Abfrage

              WHERE total > $total

Ist es nicht funktioniert, weil es nicht ein berechnetes Gesamt als Argument in der WHERE-Klausel akzeptieren kann?

Schließlich ist es eine effizientere Art und Weise all dies in einer einzigen SQL-Abfrage zu berechnen?

War es hilfreich?

Lösung

Ich glaube, Sie könnten nutzen wollen 'mit insgesamt> $ total'?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top