Bonjour,


Je dois , pour un jeu en ligne, trouver le score du meilleur joueur, sachant que ce score est calculé en faisant le cumul des 10 meilleurs scores effectué par ce meme joueur

j ai cette requete :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT users.id, users.last_name1, (
 
SELECT SUM( scores.score )
FROM scores
WHERE scores.user_id = users.id
ORDER BY scores.score DESC
LIMIT 0 , 10
) AS total, user_id
FROM users
INNER JOIN scores ON scores.user_id = users.id
GROUP BY users.id
ORDER BY total DESC
LIMIT 0 , 1
le probleme est que le LIMIT 0,10 est appliqué en SUM , donc on a en fait le total des scores effectué par le joueur en tout (pas de limite a 10) , ce qui est faux

j ai bien essayé de faire une sous requete, mais il bloque sur la clause WHERE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT users.id, users.last_name1, (
 
SELECT SUM( scores.score )
FROM (SELECT score FROM scores
WHERE scores.user_id = users.id
ORDER BY scores.score DESC
LIMIT 0 , 10) AS z
) AS total, user_id
FROM users
INNER JOIN scores ON scores.user_id = users.id
GROUP BY users.id
ORDER BY total DESC
LIMIT 0 , 1
#1054 - Unknown column 'users.id' in 'where clause'
une idée de comment s en sortir sans passer par un précalcul des 10 meilleurs scores de chaque joueur ?

Merci d'avance !


A noter que j arrive bien a avoir le total pour un user précis , comme ceci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT SUM(score ) AS total FROM (SELECT score FROM scores WHERE user_id=284 ORDER BY score DESC LIMIT 0,10) as sub_score
mais des que je veux faire une requete globale pour tous les users je galere..