2009-04-29 8 views
1

J'ai une base de données de score élevé pour un jeu qui suit chaque jeu dans une variété de mondes. Ce que je veux faire est de trouver quelques statistiques sur les jeux, et ensuite trouver où chaque monde "se classe" selon l'autre monde (trié par nombre de fois joué). Jusqu'ici j'ai toutes mes statistiques fonctionnant bien, cependant j'ai rencontré un problème pour trouver le classement de chaque monde.MySQL - Optimiser une requête et trouver un rang basé sur la colonne Sum

Je suis également assez sûr que le faire dans trois requêtes distinctes est probablement une façon très lente d'y parvenir et pourrait probablement être améliorée.

J'ai une colonne timestamp (non utilisée ici) et la colonne "world" indexée dans le schéma DB. Voici une sélection de ma source:

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 me manquerais est dans la requête RANG,

   WHERE total > $total 

Est-il ne fonctionne pas parce qu'il ne peut pas accepter un total calculé comme un argument dans la clause WHERE?

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

Répondre

4

Je pense que vous pourriez vouloir utiliser 'avoir total> $ total'?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world 
having total > $total 
ORDER BY total DESC 
+0

ou est-ce que cela se produit dans le même problème? – Louis

+0

"Invalid SQL Syntax" erreurs à la fois sur "où" et "ayant" :( –

+0

révisé, est ce que vous utilisiez? – Louis

Questions connexes