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

Langage SQL Discussion :

Requete optimisée - Classement


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut Requete optimisée - Classement
    Bonjour à tous et à toutes,

    Voila j'ai un table avec 3 champs:
    - l'id d'un joueur => user
    - son score => score
    - date du score => date

    J'aimerais pouvoir en une seule requete recuperer la position d'un joueur parmis les autres a partir de son id, sachant que des doublons de score peuvent exister et que le classement se fait sur le score et pour un meme score sur la date

    Pour le moment, je suis obligé de faire deux requetes! La premiere pour récuper le score du joueur et la seconde pour récuperer sa position

    Voila, si quelqu'un pouvait m'éclairer sur ce point ca serait bien sympa

    Merci d'avance!
    Pony

  2. #2
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Peux-tu ,stp, donner un exemple de donnée et de résultat que tu souhaites.
    Cordialement
    Pinocchio

  3. #3
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Salut,

    merci d'utiliser la fonction rechercher, le mot-clé "classement" ramène des résultats

    Ex : [SQL Server] problème de classement, calcul d'un rang
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut
    Bonjour,

    désolé pour ma non recherche et mon post mal décrit.

    Xo, j'ai été voir le sujet dont tu parles et celui m'a déjà pas mal éclairé!

    Malgré tout j'ai encore un petit soucis

    Voici ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `scores` (
      `userId` int(6) NOT NULL default '0',
      `date` int(11) NOT NULL default '0',
      `topScore` int(6) NOT NULL default '0',
      PRIMARY KEY  (`userId`),
      KEY `topScore` (`topScore`)
    )
    et voici la requete associée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT topScore, date , 
    ( SELECT COUNT(*)+1 
      FROM scores S 
      WHERE S.topScore>P.topScore 
      ORDER BY topScore DESC ) as pos 
    FROM scores P 
    WHERE userId=14738 ;
    Mon probleme se situe au niveau des joueurs qui ont le meme topScore! En effet j'aimerais que pour un meme topScore ce soit la date qui soit prise en compte pour le classement ce qui n'est pas la cas pour le moment!

    Merci pour votre aide

  5. #5
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Salut,

    juste une petite remarque, il est vivement conseillé de ne pas utilisé des mots-clé SQL pour tes noms de champ, table, etc : ton champ date devrait donc être renommé (en dateScore par exemple).

    Autre remarque : le ORDER BY dans la sous-requête ne sert à rien sur un COUNT


    Voici mon jeu d'essai, les apostrophes autour des noms de champs et tables sont propres à mySQL et me cause des soucis

    Voici ma table (je te laisse rajouter les contraintes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     CREATE Table Score (
     userId INT,
     dateScore DATE,
     topScore INT);
    Voici mes enregistrements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO Score VALUES (1, '01/11/2006', 753);
    INSERT INTO Score VALUES (2, '02/11/2006', 521);
    INSERT INTO Score VALUES (3, '03/11/2006', 681);
    INSERT INTO Score VALUES (4, '06/11/2006', 753);
    INSERT INTO Score VALUES (5, '05/11/2006', 892);
     
    COMMIT;
    Et voici ma requête :
    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
    SELECT topScore, dateScore,
     (SELECT COUNT(*) + 1
        FROM score S
       WHERE (S.topScore > P.topScore)
          OR (S.topScore = P.topScore AND S.dateScore < P.dateScore)
     ) pos
      FROM score P
      ORDER BY pos;
     
      TOPSCORE DATESCOR        POS
    ---------- -------- ----------
           892 05/11/06          1
           753 01/11/06          2
           753 06/11/06          3
           681 03/11/06          4
           521 02/11/06          5
    En fait, dans la sous-requête ramenant la position, je compte tous ceux dont le score est STRICTEMENT supérieur, ainsi que ceux pour lequel le score est EGAL, mais avec une date plus ancienne.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut
    C'est exactement ce qu'il me fallait

    Un tout grand merci pour ton aide et ok pour les mots clés SQL

    Tchuss et a bientôt
    lePouns

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

Discussions similaires

  1. Requete / Optimisation
    Par Targan dans le forum SQL
    Réponses: 20
    Dernier message: 25/11/2010, 10h57
  2. requete de classement
    Par TryanDtry dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/10/2007, 11h10
  3. Réponses: 4
    Dernier message: 23/06/2006, 17h35
  4. Réponses: 9
    Dernier message: 30/01/2006, 08h42
  5. requete optimisable ??
    Par mooztik dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/10/2005, 17h27

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