Bonjour à toutes et tous
Je crée un Nouveau Post pour ma nouvelle question concernant la performance
j'ai enfin réussi à faire ce que je veux (faire un classement d'une donne précise) ce qui peut intéresser d'autres débutant
départ: faire 2 COUNT "NscoreSup et NMemescore" sur une même colonne "score" d'une table avec des auto-jointures, pour utiliser ces 2 COUNT pour faire un classement.
Ce qui est important c'est les différents GROUP BY des 2 auto-jointures et la première jointure LEFT et enfin le GROUP BY pour l'affichage
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT pl.pseudo, t1.score ,((100*((@np:=(SELECT nbrePlayer FROM donnes WHERE id=1)-1) - COUNT(t2.id_players) - (0.5*(t3.NMemescore-1))))/(@np-1)) AS classement FROM (SELECT* FROM donnes_players WHERE id_donnes=1) AS t1 LEFT JOIN (SELECT id_players,score,id_donnes FROM donnes_players WHERE id_donnes=1 group by id_players)AS t2 ON t2.score>t1.score INNER JOIN (SELECT id_players,score,id_donnes,COUNT(id_players) AS NMemeScore FROM donnes_players WHERE id_donnes=1 GROUP BY score)AS t3 ON t3.score=t1.score INNER JOIN (SELECT pseudo FROM players) AS pl ON t1.id_players=pl.id GROUP BY t1.id_players ORDER BY t1.score DESC ,pl.pseudo ASC
Cette requête sera appelé par tous joueurs (un millier) pour voir son classement pour une donne précise avec id_donnes.
Maintenant mon problème est la performance car cette requête s'exécute en plus de 2 secondes avec l'affichage.
J'ai bien pensé aux Vues mais on ne peux pas passer de paramètres et là il me faut l'id_donnes que le joueur veut voir le classement.
IL y a les requêtes préparées mais je ne vois pas bien la rapidité car juste avant d’exécuter la requête il faut transmettre l'id_donnes et tous les joueurs peuvent vouloir un classement d'une donne différente. Un même joueur ne fera appel au résultat de la requête qu'une fois par connexion à la base.
Les requêtes stockées c'est la même chose à chaque fois qu'un joueur veut son classement il fournit l'id_donne qu'il veut consulter .
Si Vous avez des pistes pour améliorer la performance merci d'avance
Partager