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 :

Rang d'une ligne avec un index


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut Rang d'une ligne avec un index
    Bonjour,

    j'ai une table de joueur tous avec un certain nombre de points:

    id | name | rating | matches

    Rating contient le nombre de point d'un joeur, et bien sûr un index est créé dessus. (Sur name aussi)

    Etant donné le nom d'un joeur, comment récupérer son classement? Je veux dire, comment récupérer son classement sans faire un scan de la table entière, ce qui serait stupide vu qu'il y a un index sur rating?

    Je pose cette question parce que l'on m'a assuré que par exemple PostGreSQL en utilisant les index pouvait retrouver la donnée instantanément (ou en log(n), mais c'est pareil...) car stockée dans un arbre binaire équilibré. (j'espère que je n'ai pas fait un mauvais choix en décidant d'utiliser SQL pour mon programme)

    Merci

    PS:

    Ma requête ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from tabledesmatches where name='coyotte507' order by rating desc
    Mais ça me donne rien...

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    En fait il semblerait que j'ai encore des choses à apprendre sur SQL

    et que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from table where (rating>1500 or (rating=1500 and name<='coyotte507'))
    marche bien (où 1500 est la valeur de mon rating, extraite par une précédente requête SQL), et se comporte intelligemment.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne comprends aucune de vos deux requêtes.
    La traduction de votre besoin est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Rating
      FROM MaTable
     WHERE name = 'coyotte507';
    L'index sur name sera utilisé pour connaître la position de la ligne dans la table, puis la ligne de la table sera lue.

    Si vous faites un index sur (name, rating), là vous avez simplement besoin de lire l'index, mais vu la structure de la table je ne suis pas certain que cela fasse une différence fondamentale.

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    En fait Rating est le nombre de points, et ranking le classement (extrait du nombre de points, et par rapport aux autres joueurs).

    Je cherchais à connaître le rang de telle ligne lorsque la table est classée sur rating, pour obtenir le ranking, mais en lisant un nombre de lignes minimal (et je crois que maintenant c'est bon).

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

Discussions similaires

  1. [XL-2003] Range d'une ligne complète avec indice de ligne dynamique
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/10/2011, 09h23
  2. [DEBUTANT]comparaison une ligne avec un STRing
    Par Battosaiii dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2005, 20h15
  3. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 09h34
  4. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  5. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24

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