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?
ou est-ce que cela se produit dans le même problème? – Louis
"Invalid SQL Syntax" erreurs à la fois sur "où" et "ayant" :( –
révisé, est ce que vous utilisiez? – Louis