transmettre une variable à une vue
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:
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 |