Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete SQL (classement)

Sujet résolu
    16 janvier 2019 à 9:18:04

    Bonjour a tous,

    j'ai une requete SQL qui me permet de determiner le classement du joueur en fonction des scores et de la date.

    SELECT 1 + count(*) AS rank FROM players WHERE score < :score ORDER BY score ASC, date DESC

    Admettons que le joueur a un score de 0.12, eh bien il sera avant le joueur qui a 0.5 et apres le joueur qui a 0.08 (par exemple).

    Ma requete SQL ne me donne pas toujours le resultat souhaite. En effet, parfois elle me donne 5 alors qu'en realite le joueur est a la 4ieme position (et parfois elle me donne la bonne position).

    Pouvez vous me dire ou est mon erreur ?

    merci

    -
    Edité par JonathanIdealump 16 janvier 2019 à 10:56:40

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2019 à 10:07:17

      Salut,

      il y a un problème dans ton analyse:

      0.5 > 0.12 > 0.08

      Peux-tu nous montrer ce que tu attends et ce qu'i est réellement affiché ? Sur un exemple simple ;)

      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2019 à 10:34:20

        Bonjour,

        Mauvais forum

        Le sujet est déplacé de la section PHP vers la section Base de données

        Mauvais titre

        Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

        Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

        De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

        Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

        Pour modifier votre titre, éditez le premier message de votre sujet.

        (titre originel : Requete SQL)


        -
        Edité par Lamecarlate 16 janvier 2019 à 10:34:44

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          16 janvier 2019 à 10:53:56

          @christouphe merci pour ta reponse.

          En fait si je reprend cet exemple: 0.5 > 0.12 > 0.08

          a l'interieur de mon jeu, le 1er est donc celui qui a 0.08 , le second est celui qui a 0.12 et le dernier est celui qui a 0.5

          Donc admettons que tu a un score de 0.10 eh bien tu seras le 2ieme et le classement sera:

          1er : 0.08

          2ieme: 0.10

          3ieme: 0.12

          4ieme: 0.5 (Et on n'affiche que les 10 premiers)

          Voici ma table SQL

          CREATE TABLE IF NOT EXISTS `players` (
            `ID` int(11) NOT NULL AUTO_INCREMENT,
            `date` datetime NOT NULL,
            `username` varchar(20) NOT NULL,
            `score` float NOT NULL,
            PRIMARY KEY (`ID`)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

          -
          Edité par JonathanIdealump 16 janvier 2019 à 11:08:06

          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2019 à 11:09:47

            Lorsque je fais: 

            SELECT 1 + count(*) AS rank FROM players WHERE score < 0.10 ORDER BY score ASC, date DESC

            Ca ne me donne pas le bon classement...

            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2019 à 11:11:56

              ton champ score possède quel type ?

              • Partager sur Facebook
              • Partager sur Twitter
                17 janvier 2019 à 1:59:16

                christouphe a écrit:

                ton champ score possède quel type ?


                J'ai donne la structure de ma table SQL plus haut. "score" est de type float
                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2019 à 18:09:53

                  Bonjour,

                  Cela me paraît bizarre de partir d'un score donné pour chercher le classement ... J'imagine plutôt partir de l'ID de joueur non ?

                  Pour les classements j'aime bien passer par une sous-requête (ou une vue du coup) qui calcule tout le classement :

                  SELECT @rang := @rang+1 , P.*
                  FROM players P, ( SELECT @rang := 0 ) T
                  ORDER BY score DESC

                  Ensuite tu peux chercher dans cette sous-requête (ou vue) :

                  SELECT R.player_rank
                  FROM
                  	(
                  		SELECT
                  			@rang := @rang+1 AS player_rank,
                  			P.*
                  		FROM players P, ( SELECT @rang := 0 ) T
                  		ORDER BY score ASC, date DESC
                  	) R
                  WHERE R.ID = 'id souhaité'
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    18 janvier 2019 à 1:58:29

                    @Benzouye:

                    En fait dans le jeu que je dois creer le classement se fait un peu differemment. C'est celui qui reussi a obtenir la valeur la plus faible qui gagne.

                    Edit: Je viens de tester et c'est exactement ca merci beaucoup. Je n'aurai JAMAIS pu trouver ca tout seul.

                    -
                    Edité par JonathanIdealump 18 janvier 2019 à 7:49:09

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Requete SQL (classement)

                    × 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