Partage
  • Partager sur Facebook
  • Partager sur Twitter

Classer certains id

C'est possible?

Sujet résolu
    25 octobre 2006 à 19:38:01

    Bonjour,

    J'ai une question a vous poser. je voudrait faire un classement de joueurs (jusque là c'est pas dur) mais je voudrait mettre 15 membres au dessus de moi et 15 membres en dessous de moi au niveau point et je sais pas si ORDER BY ca va passez. J'ai pensé a LIMIT mais bon la valeur va changer tout le temps celon les points donc ca ne va pas marcher.

    Vous ne sauriez pas comment faire?? :)
    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2006 à 20:12:00

      Pas évident ce que tu veux faire directement dans ta requête.

      Le problème vient des ids manquants sinon, avec le LIMIT, ce serait possible.

      Je vois pas autrement que le faire en php.
      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2006 à 0:18:46

        Hum ouai. Mais dans le LIMIT je peut mettre une variable a la place du nombre?
        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2006 à 16:57:15

          J'ai regardé, et c'est possible avec le limit.

          Un exemple :
          $user_id = 7;
          $nb = 15;

          // recherche du numéro de ligne de l'utilisateur dans la table
          $sql = 'SELECT COUNT(*) FROM la_table WHERE id <=' . $user_id;
          $result = mysql_query($sql) or die(mysql_error());
          $pos = mysql_result($result, 0);

          // nbre total d'entrée
          $sql = 'SELECT COUNT(*) FROM la_table';
          $result = mysql_query($sql);
          $tt = mysql_result($result, 0);

          $limit = ( $pos - $nb < 0 ) ? "0, " : "$pos-$nb, ";
          $limit .= ( $pos + $nb > $tt ) ? $tt : $pos+$nb;

          $sql = 'SELECT id FROM la_table LIMIT ' . $limit;
          $result = mysql_query($sql);

          while( $l = mysql_fetch_assoc($result) )
          {
                          // affichage
          }


          A tester.
          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2006 à 18:16:07

            Il y a un bug ^^ . Il m'affiche 15 membres en tout et non 15 au dessus et 15 en dessous.
            • Partager sur Facebook
            • Partager sur Twitter
              26 octobre 2006 à 19:08:09

              Ah, oui, j'ai fait une connerie :D

              Je pense que c'est :

              $limit = ( $pos - $nb < 0 ) ? "0, " : "$pos-$nb, ";
              $limit .= ( $pos+$nb) > $tt ) ? $tt : $pos+($nb*2);


              A voir :p

              • Partager sur Facebook
              • Partager sur Twitter
                26 octobre 2006 à 19:16:45

                :p maintenant il m'affiche tout les membres de ma table ^^ .
                • Partager sur Facebook
                • Partager sur Twitter
                  26 octobre 2006 à 19:29:23

                  Euh ouais, y'a une parenthèse en trop.

                  $limit = ( $pos - $nb < 0 ) ? "0, " : "$pos-$nb, ";
                  $limit .= ( $pos+$nb > $tt ) ? $tt : $pos+($nb*2);


                  Montre un echo de $sql, si ça ne fonctionne toujours pas correctement.


                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 octobre 2006 à 19:49:07

                    Ok cool ca marche voila le script final (car tu avez mis quelque truc en trop):

                    $nb = 15;

                    // recherche du numéro de ligne de l'utilisateur dans la table
                    $sql = 'SELECT id FROM membres WHERE id =' . $_SESSION['id'].'';
                    $result = mysql_query($sql) or die(mysql_error());
                    $pos = mysql_result($result, 0);


                    // nbre total d'entrée
                    $sql = 'SELECT COUNT(*) FROM membres';
                    $result = mysql_query($sql);
                    $tt = mysql_result($result, 0);

                    $limit = ( $pos - $nb < 0 ) ? "0, " : "$pos-$nb, ";
                    $limit .= ( $pos+$nb > $tt ) ? $tt : $pos+$nb;

                    $sql = 'SELECT id, pseudo, alliance, points, nom_ville FROM membres LIMIT ' . $limit;

                    $result = mysql_query($sql);

                    while( $donnees = mysql_fetch_assoc($result) )
                    {

                    }



                    Merci beaucoup de ton aide strucky :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 octobre 2006 à 19:56:46

                      Non, le WHERE id <= est obligatoire dans la 1ère requête.

                      Car là tu t'appuies sur l'id et non sur le numéro de la ligne dans la table.

                      Si un jour tu supprimes des membres dans ta table, ça va bugguer.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 octobre 2006 à 20:29:21

                        A oui j'ai tester et ca m'enleve 1 ligne ^^ . Meme avec ton me met que 14 :euh:
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 octobre 2006 à 20:34:24

                          Bon, ben, y doit y avoir un problème alors :D

                          Enlèves en 2, pour voir si en met toujours 14.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 octobre 2006 à 20:45:17

                            Non il compte l'id qui manque ^^ .

                            Juste une question, ceci est juste au moin?:

                            $user_id = $_SESSION['id'];
                            $nb = 13;


                            J'ai regarder il y a bien 15 membres enn comptant ceux mis au dessus du mien donc je sais pas du tout :D
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 octobre 2006 à 20:59:35

                              Oui, c'est bon, si $_SESSION['id'] représente l'id de la table.

                              Je vais faire une table pour tester.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 octobre 2006 à 21:01:48

                                Oki merci beaucoup de te donner tant de mal strucky car ca fait environ 1 jour et demi que je cherche et tout mais sans succes ^^ . J'avais tenté un script mais bon sans succes donc me suis permit de venir demander de l'aide a des Pro :) .
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 octobre 2006 à 21:12:45

                                  Ceci n'a rien avoir avec ton problème, mais il y a un petit bug sur le marché ...

                                  Citation : Pas de titre

                                  ACHETEUR OK
                                  Vendeur OK
                                  Vous venez d'acheter:
                                  250000 de argent
                                  contre:
                                  250000 de charbon



                                  Je n'avais que 1000 de charbon et l'échange s'est fait ;)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 octobre 2006 à 21:17:42

                                    Oki cool merci je vais arrangé ca direct :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 octobre 2006 à 21:29:50

                                      En plus ça m'intéresse de faire un truc comme ça, ça peut toujours servir :p

                                      J'ai testé, et voilà ce que j'obtiens :

                                      $user_id = 86;
                                      $nb = 15;

                                      // recherche du numéro de ligne de l'utilisateur dans la table
                                      $sql = 'SELECT COUNT(*) FROM membre_connexion WHERE id <' . $user_id;
                                      $result = mysql_query($sql) or die(mysql_error());
                                      $pos = mysql_result($result, 0);

                                      // nbre total d'entrée
                                      $sql = 'SELECT COUNT(*) FROM membres';
                                      $result = mysql_query($sql);
                                      $tt = mysql_result($result, 0);

                                      $limit = ( $pos - $nb < 0 ) ? "0, " : $pos-$nb . ",";
                                      $limit .= ( $pos<=$nb ) ? $pos+$nb+1 : $nb*2+1;

                                      $sql = 'SELECT id, pseudo FROM membres LIMIT ' . $limit;
                                      $result = mysql_query($sql) or die(mysql_error());

                                      $i = 1;
                                      while( $l = mysql_fetch_assoc($result) )
                                      {
                                                      if( $l['id'] == $user_id ) echo '<b>';
                                                      echo $i . ' => ' . $l['id'] . ' => ' . $l['pseudo'] . '<br />';
                                                      if( $l['id'] == $user_id ) echo '</b>';
                                                      $i++;
                                      }


                                      J'ai mis une 100aine d'entrées dans ma table, et j'ai testé avec des ids différents, a-priori, c'est bon.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        26 octobre 2006 à 21:54:53

                                        Merci beaucoup ca marche mais (et oui un mais) a moitié car il ne m'affiche pas les 15 au dessus ^^ . Les 15 au dessous c'est niquel mais bon .....

                                        EDIT: NON NON NON J'AI RIEN DIS CA MARCHE LOOOOL
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          26 octobre 2006 à 22:00:13

                                          Ben chez moi, j'ai bien les 15 en dessous et au dessus o_O

                                          Si t'es à la fin de ta table, c'est normal.

                                          Je me disais aussi :p

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 octobre 2006 à 22:09:57

                                            Allez encore une toute dernier question avant de partir ^^ (OUFfff loool). Je voudrait en faite que ce soit trier par point donc qu'il liste 15 personne au dessus (niveau point) et 15 en dessous (niveau point). Bon j'ai tester avec un ORDER BY points (ca aurez été trop simple sinon :p )

                                            Comment on fait??
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 octobre 2006 à 22:26:47

                                              C'est forcément avec un order by.

                                              Mais faire ça directement dans une requête, je sais pas trop.
                                              Je vais essayer pour voir, mais c'est pas gagné :p

                                              Je pense qu'il faut une sous requête ou jointure.


                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                26 octobre 2006 à 22:32:56

                                                C'est bon j'ai trouvez ^^ . J'ai rajoute ORDER BY points DESC au requetes:

                                                $sql = 'SELECT COUNT(*) FROM membres WHERE id <' . $user_id.' ORDER BY points DESC';

                                                ensuite a:

                                                $sql = 'SELECT COUNT(*) FROM membres ORDER BY points DESC';

                                                et

                                                $sql = 'SELECT id, pseudo, points, alliance, nom_ville FROM membres ORDER BY points DESC LIMIT ' . $limit;



                                                Merci enormement strucky encore une fois.
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Classer certains id

                                                × 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