IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Obtenir numéro d'un classement avec ORDER BY


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Obtenir numéro d'un classement avec ORDER BY
    Bonjour à tous,

    Alors voilà, j'ai une table qui contient entre autre un champ "moyenne" et une clé primaire "id".
    Pour chaque enregistrement, je voudrais obtenir son classement.
    J'ai fait un ORDER BY sur la moyenne sur la table mais je coince pour récupérer le numéro de l'entrée correspondant à "id" dans la liste obtenue.

    Merci d'avance pour votre aide !

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Ce n'est pas quelque chose que MySQL va te retourner naturellement, mais tu peux le gérer dans ton application, avec un compteur qui s'incrémente à chaque ligne de résultat par exemple.
    Pensez au bouton

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    effectivement, je n'avais pas pensé à ça.
    Merci bien

  4. #4
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    J'arrive après la bataille, mais vu que les questions du genre "comment établir un classement en SQL" reviennent souvent, j'en profite pour proposer ma solution.

    jersey_girl, je ne connais pas la structure de ta table. J'ai donc simplifié le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE notes
    (
       id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
       moyenne INT UNSIGNED
    );
     
    INSERT INTO notes(moyenne) VALUES (5), (8), (10), (16), (1), (17);
    Si on veut un classement (ordonné) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SET @pos = 0;
    SELECT @pos := @pos+1 AS position, moyenne, id FROM notes ORDER BY moyenne DESC;
     
    +----------+---------+----+
    | position | moyenne | id |
    +----------+---------+----+
    |        1 |      17 |  6 |
    |        2 |      16 |  4 |
    |        3 |      10 |  3 |
    |        4 |       8 |  2 |
    |        5 |       5 |  1 |
    |        6 |       1 |  5 |
    +----------+---------+----+
    Si maintenant, on veut afficher selon un ordre différent de la position dans le classement (dans mon exemple : par l'identifiant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SET @pos = 0;
    SELECT notes.id, clas.position, clas.moyenne
    FROM notes JOIN
       (
          SELECT @pos := @pos+1 AS position, moyenne, id FROM notes ORDER BY moyenne DESC
        ) clas ON notes.id = clas.id
    ORDER BY id;
     
    +----+----------+---------+
    | id | position | moyenne |
    +----+----------+---------+
    |  1 |        5 |       5 |
    |  2 |        4 |       8 |
    |  3 |        3 |      10 |
    |  4 |        2 |      16 |
    |  5 |        6 |       1 |
    |  6 |        1 |      17 |
    +----+----------+---------+
    Après il suffit d'ordonner avec la bonne colonne (ex : ordre alphabétique s'il y a un champ "nom") et de faire les autres jointures nécessaires, et on obtient tout dans une seule requête.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/09/2014, 07h03
  2. Pb classement avec ORDER BY ?
    Par BMATH dans le forum Requêtes
    Réponses: 18
    Dernier message: 24/10/2012, 22h36
  3. Classement alphanumérique avec ORDER BY
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 07/10/2007, 21h19
  4. Réponses: 1
    Dernier message: 17/08/2006, 20h27
  5. Comment obtenir l'heure du serveur avec flash ?
    Par Michaël dans le forum Flash
    Réponses: 9
    Dernier message: 23/12/2003, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo