J'ai un tableau qui contient les enregistrements de tous les matchs joués par chaque joueur. J'ai pris une bonne longueur d'avance grâce à la première réponse à cette question : Classement avec des millions d'entrées et j'utilise actuellement cette requête pour récupérer le meilleur score de chaque joueur et son classement :
SET @rank=0;
SELECT user_id, score, rank FROM (
SELECT *, @rank := @rank + 1 as rank
FROM high_scores
JOIN (
SELECT user_id as user_id2, MAX(score) AS max_score
FROM high_scores
GROUP BY user_id2
ORDER BY max_score DESC) AS max_score_table
ON max_score = high_scores.score AND high_scores.user_id = user_id2) derived_table
ORDER BY rank;
Encore une fois, cela me donne une belle liste ordonnée du meilleur score de chaque joueur et de son rang ; Cependant, j'aimerais également pouvoir fournir un numéro d'identification spécifique. user_id
et filtrer les résultats en fonction du score de cet utilisateur ainsi que de X scores environnants supérieurs et inférieurs.
Je pense qu'il me faudrait effectuer une SELECT ... WHERE
sur "derived_table" pour le user id
et utiliser la valeur de la ligne retournée 'rank'
pour filtrer le niveau supérieur SELECT
mais, outre le fait que la requête n'est même pas acceptée ("table_dérivée n'existe pas"), la façon dont je procédais m'aurait obligé à interroger deux fois la table_dérivée (pour un test plus grand que et moins grand que), ce qui aurait rendu la requête encore moins efficace qu'elle ne devrait probablement l'être.
Comment puis-je filtrer la liste complète des meilleurs scores et des meilleurs classements pour n'en retenir qu'un seul ? user_id
et X entrées environnantes ? Tout commentaire sur le code que j'essaie de mettre au point (ou sur le code que j'ai actuellement) serait grandement apprécié.