Question

J'ai une base de données de scores élevés pour un jeu qui suit chaque jeu dans une variété de mondes. Ce que je veux faire, c'est trouver des statistiques sur les pièces, puis trouver où chaque monde "se classe". en fonction des autres mondes (triés par le nombre de fois joué).

Jusqu'à présent, toutes mes statistiques fonctionnent bien, mais j'ai eu du mal à trouver le classement de chaque monde.

Je suis également convaincu que cette opération dans trois requêtes distinctes est probablement un moyen très lent d'y parvenir et pourrait probablement être améliorée.

J'ai une colonne d'horodatage (non utilisée ici) et le "monde". colonne indexée dans le schéma de base de données. Voici une sélection de mes sources:

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

Je crois que la ligne de code spécifique qui m'échoue est dans la requête RANK,

              WHERE total > $total

Cela ne fonctionne-t-il pas car il ne peut pas accepter un total calculé comme argument dans la clause WHERE?

Enfin, existe-t-il un moyen plus efficace de calculer tout cela en une seule requête SQL?

Était-ce utile?

La solution

Je pense que vous voudrez peut-être utiliser "ayant un total > $ total '?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top