Partage
  • Partager sur Facebook
  • Partager sur Twitter

Obtenir un classement selon les enregistrements

    24 avril 2022 à 17:28:27

    Bonjour,

    Je dispose d'une base de données contenant une table partie qui associe deux joueurs qui jouent à un jeu et le résultat de la partie (l'id du joueur gagnant). J'aimerais faire un select des identifiants des joueurs gagnants et les trier en fonction du nombre de fois que chacun apparait, de sorte à ce que le joueur ayant gagné le plus de partie se retrouve tout en haut. Est-ce que quelqu'un a une idée ?

    Bonne soirée

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2022 à 19:29:02

      Bonjour,

      Peux-tu poster le CREATE TABLE de la table en question ?

      Avec un exemple de données et le résultat attendu ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        25 avril 2022 à 10:57:29

        j'ai pas le create table mais en gros la table c'est ca :

        Partie

        -id_partie

        -id_joueur 1

        -id_joueur 2

        -id_gagnant (la case est NULL tant que y'a pas de gagnant)

        Et j'aimerais un truc qui me sorte

        id_joueur | nombre de parties gagnées

        id_joueur | nombre de parties gagnées

        dans l'ordre décroissant pour afficher un classement

        merci ;)

        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2022 à 11:49:33

          OK.

          La structure n'est pas idéale, il aurait mieux valu normaliser en créant plutôt trois tables :

          • joueur ( id_joueur [pk], nom, prenom, etc. )
          • partie ( id_partie [pk], lieu, date_creation, etc. )
          • participant ( id_partie [pk][fk], id_joueur [pk][fk], gagnant ) avec gagnant valant 0 ou 1.

          La requête voulue serait alors :

          SELECT
          	id_joueur,
          	COUNT(*) AS nb_victoires
          FROM participant
          WHERE gagnant = 1
          GROUP BY id_joueur

          Si tu ne veux (ou peux) pas revoir ton modèle, alors je te propose ceci :

          SELECT
          	IF( id_joueur1 = id_gagnant, id_joueur1, id_joueur2 ) AS id_joueur,
          	COUNT(*) AS nb_victoires
          FROM Partie
          WHERE id_gagnant IS NOT NULL
          GROUP BY IF( id_joueur1 = id_gagnant, id_joueur1, id_joueur2 )

          PS : Pour obtenir le CREATE TABLE d'une table, il suffit de faire :

          SHOW CREATE TABLE nom_de_la_table;
          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            25 avril 2022 à 12:52:58

            Ok ok merci ! pour la table en fait elle est pas sur mon pc mais en tout cas merci beaucoup pour les conseils !! bonne journée ;)
            • Partager sur Facebook
            • Partager sur Twitter

            Obtenir un classement selon les enregistrements

            × 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