Bonjour
j'ai une table qui stocke le score de chaque fin de partie de jeu de chaque joueur.
table: donnes_players
colonnes: id_player, score, id_donne (N° de la partie jouée).
Mon but est de faire un classement à chaque fin de partie d'1 joueur pour tous les joueurs (de cette partie).
Le classement est établi sur le nombre de joueurs total de la partie,
le nombre de joueurs qui ont un score supérieur au score du joueur,
le nombre de joueurs qui ont le même score que le joueur.
Donc à chaque fin de partie d'1 joueur ces 3 paramètres vont faire varier le classement de tous les autres joueurs(pour cette partie), donc il faut recalculer le classement pour chaque joueur.
J'ai fait avec 2 vues le calcul des scores supérieurs et des mêmes scores
une requête fait appel à ces deux vues et effectue le calcul du classement pour tous les joueurs et qui peut maintenant être affiché.
(j'ai fait 2 vues car je n'arrivais pas à sortir les 2 valeurs NscoreSup et NMemeScore pour chaque joueur pour cette partie)
Voici mon problème: dans ces vues j'ai fixé à 1 l'id_donne mais comment bien sûr faire pour avoir les classements sur les autres donnes si on ne peut pas transmettre de variable.
voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #création de la vue pour le calcul des scores supérieurs CREATE OR REPLACE VIEW v_NscoreSup (id_players, score, NscoreSup) AS SELECT t1.id_players,t1.score, COUNT(t2.score) AS NscoreSup FROM donnes_players AS t1 INNER JOIN donnes_players AS t2 ON t2.score >= t1.score WHERE t1.id_donnes=1 AND t2.id_donnes=1 GROUP BY t1.id_players,t1.score ORDER BY score DESC, id_players #Création de la vue pour les mêmes scores CREATE OR REPLACE VIEW v_NMemeScore (id_players, score, NscoreSup) AS SELECT t1.id_players,t1.score, COUNT(t2.score) AS NscoreSup FROM donnes_players AS t1 INNER JOIN donnes_players AS t2 ON t2.score = t1.score WHERE t1.id_donnes=1 AND t2.id_donnes=1 GROUP BY t1.id_players,t1.score ORDER BY score DESC, id_players #Requête permettant d'afficher le classement SET @id_donnes:=1; SELECT Meme.id_players,Meme.score ,(((100*(((SELECT @nbreplayer:=nbrePlayer FROM donnes WHERE id=@id_donnes)-1)-(Sup.NscoreSup-Meme.NMemeScore)-(0.5*(Meme.NMemeScore-1))))/(@nbreplayer-1)))AS Classement FROM v_nmemescore AS Meme INNER JOIN v_nscoresup AS Sup ON Meme.id_players=Sup.id_players
Partager