Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide - Création d'un algorithme puis de la requete

    2 mai 2021 à 1:25:39

    Je viens vers vous car j'ai un problème pour créer une requête, je ne sais pas comment répondre au problème.

    Chaque joueurs dispose d'un indicateur statistique de performance (dépendant de nombreux éléments). Cette indicateur évolue a chaque match joué.

    Je dispose d'une table dans laquelle sont répertoriés l'ensemble des matchs joués. Il y a une ligne par joueur pour chaque match; autrement dit, pour chaque match, deux lignes dans la table (une pour le joueur 1 et l'autre pour le joueur 2). Une date est donnée pour chacun des matchs.

    Les matchs sont situés dans la table "resultats", qui se présente comme suit  :

    idjoueur / kill / death / victoire / défaite / .......... / date (je n'ai noté que les colonnes utiles).

    J'aimerais que l'indice de performance dépende de plusieurs paramètres : nombre de victoire, kills effectués, accession aux Playoffs... ça j'ai réussi à le faire ! Mais j'aimerais également que cet indice dépende de l'indice de l'adversaire au moment où les joueurs s'affrontent. Il faut donc une chronologie, car les matchs doivent être pris dans l'ordre.

    Cela implique d'avoir avant chaque début de match, l'indice de performance du joueur 1 et celui du joueur 2. Je ne vois pas du tout comment accéder à cela... pour le moment j' ai mon code qui me permet d'avoir l'indice de performance à la fin de tous les matchs (donc une seule et unique valeur par joueur !)

    Voici la requête  :

    SELECT
    						SUM( C.pv ) AS pv2,
    						C.Coachs
    					FROM
    					(
    						(
    							SELECT
    								C.Coachs,
    								ROUND( 3 * SUM(R.victoire) / ( SUM(R.victoire) + SUM(R.defaite) ), 2 ) AS pv
    							FROM
    								`coachs` C
    									RIGHT JOIN `resultats` R
    										ON C.id = R.idjoueur
    							WHERE R.`po` = "oui"
    							GROUP BY C.Coachs
    							ORDER BY pv DESC                          
    					 
    						)
    						UNION ALL
    						(
    							SELECT
    								C.Coachs,
    								ROUND( 1 * ((C.CoachOfTheWeek)  / ( SUM(R.defaite) + SUM(R.victoire) )) + IFNULL( 2 * (((SUM(R.kill))  / ( SUM(R.defaite) + SUM(R.victoire) )) / 6), 0 ), 2 ) AS pv
    							FROM
    								`coachs` C
    									RIGHT JOIN `resultats` R
    										ON C.id = R.idjoueur
    							GROUP BY C.Coachs
    							ORDER BY pv DESC
    						)
    						UNION ALL
    						(
    							SELECT 
    								C.Coachs, 
    								ROUND(IFNULL( CASE WHEN (SUM(R.victoire) + SUM(R.defaite)) < 16  THEN (1 - 0.01 * (15 - (SUM(R.victoire) + SUM(R.defaite)))) ELSE 1 END 
    								* (50 + 15 * 2*(SUM(R.victoire)  / (SUM(R.victoire) + SUM(R.defaite)) - 0.5)), 0) +
    								
    								IFNULL( ((C.LvlS1/40 * (3 * (C.S1/9) * (9 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS1 + 4 * C.troisS1 
    								+ 4 * FinaleS1 + 10 * WinS1)) 
    							
    								+ (C.LvlS2/40 * (3 * (C.S2/8) * (8 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS2 + 4 * C.troisS2 
    								+ 4 * FinaleS2 + 10 * WinS2)) 
    								
    								+ (C.LvlS3/40 * (3 * (C.S3/9) * (9 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS3 + 4 * C.troisS3
    								+ 4 * FinaleS3 + 10 * WinS3))
    
    								+ (C.LvlS4/40 * (3 * (C.S4/8) * (8 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS4 + 4 * C.troisS4 
    								+ 4 * FinaleS4 + 10 * WinS4))
    
    								+ (C.LvlS5/40 * (3 * (C.S5/8) * (8 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS5 + 4 * C.troisS5 
    								+ 4 * FinaleS5 + 10 * WinS5))							
    
    								+ (C.LvlS6/40 * (3 * (C.S6/7) * (7 / ((C.nbsaisonsa8  * 8) + (C.nbsaisonsa9  * 9) + (C.nbsaisonsa7 * 7))) + 8 * C.poS6 + 4 * C.troisS6 
    								+ 4 * FinaleS6 + 10 * WinS6)))
    
    								/((C.nbsaisonsa8) + (C.nbsaisonsa9) + (C.nbsaisonsa7)), 0),2) AS pv					
    								
    							FROM
    								`coachs` C
    									RIGHT JOIN `resultats` R
    										ON C.id = R.idjoueur
    							WHERE R.`saisonreg` = "oui" 
    							GROUP BY C.Coachs
    							ORDER BY pv DESC
    						)
    					) C
    					GROUP BY C.Coachs
    					ORDER BY pv2 DESC

    L'idée est d'ajouter dans mon indice de perf la valeur suivante : la somme pour tous les matchs gagnés de (1-(1-l'indice de perf de l'adversaire)) / nombre de matchs joués

    Voilà... en somme je ne sais pas comment réaliser cela ni par où commencer. Avez-vous des idées pour m'aiguiller ?

    J'espère que vous pourrez m'aider !

    Amb



    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2021 à 9:20:20

      Bonjour,

      AmbPom a écrit:

      L'idée est d'ajouter dans mon indice de perf la valeur suivante : la somme pour tous les matchs gagnés de (1-(1-l'indice de perf de l'adversaire)) / nombre de matchs joués

      As-tu déjà commencé à travailler sur le calcul de cette nouvelle valeur, de manière isolé ?

      Si j'essaye de comprendre, je commencerai par créer une vue avec le calcul actuel de l'indice de performance par joueur (coach ?).

      Puis une vue avec le nombre de matches joué par joueur (coach ?).

      Ensuite une vue avec le nombre de matches gagnés par joueur (coach ?).

      Enfin, une requête utilisant toutes ces vues pour calculer l'indice final ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

      Aide - Création d'un algorithme puis de la requete

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown