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

SQL Procédural MySQL Discussion :

"Rang" d'un enregistrement dans une requête


Sujet :

SQL Procédural MySQL

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut "Rang" d'un enregistrement dans une requête
    Bonjour,

    Je voudrais obtenir la position d'un enregistrement dans une table, selon un critère donné, désolé si je ne suis pas précis, je voudrais par exemple obtenir la position d'un joueur dans un classement.

    Exemple :

    SELECT *
    FROM JOUEURS
    ORDER BY (INDICE_SCORE_1*INDICE_SCORE_2 + 1.5*INDICE_SCORE_3), ID

    Admettons que (INDICE_SCORE_1*INDICE_SCORE_2 + 1.5*INDICE_SCORE_3) soit la formule pour calculer le score, comment obtenir la position d'un certain joueur (identifié par le champ "ID" par exemple) dans ce classement ?

    Je suis clair ?

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Bonjour,

    Il faudrait faire une jointure avec la table elle même afin de pouvoir calculer le nombre de joueurs ayant un score strictement plus Gros. Mais bon, c'est relativement couteux et devrait surement être géré de façon applicative si c'est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, count((J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3) < (J2.INDICE_SCORE_1*J2.INDICE_SCORE_2 + 1.5*J2.INDICE_SCORE_3)) + 1 AS Classement FROM JOUEURS J1,JOUEURS J2
    ORDER BY (J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3), J1.ID
    PS: je ne suis plus sûr de la syntaxe de ce genre de chose

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Malheureusement il est ici imposé un mode "temps réel" ... Je te remercie pour ta solution qui est excellente, le seul problème que j'y vois (mais, je m'en excuse, je n'avais pas décrit cette précision), c'est qu'il ne départage pas en cas d'égalité.

    Si les joueurs 3,4,5 sont à égalité, ils auront tous 3 la position "3", j'aimerais pouvoir les départager en fonction de leur ID (admettons que le plus ancien joueur ait par exemple la "priorité" sur les 2 autres nouveaux), une idée ?

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Oui, il suffit d'ajouter des fonctions IF imbriquées et l'algo serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(SCORE1>SCORE2,0,IF(SCORE1<SCORE2,1,ID1>ID2))

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Re-bonjour,

    Je suis désolé j'ai regardé tant que j'ai pu, mais je n'ai pas compris comment utiliser cela dans une requête pour obtenir la position du joueur ... tu peux juste détailler un peu plus s'il te plait ?

  6. #6
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par Adjanakis Voir le message
    Oui, il suffit d'ajouter des fonctions IF imbriquées et l'algo serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(SCORE1>SCORE2,0,IF(SCORE1<SCORE2,1,ID1>ID2))
    Il faut remplacer chaque variable par l'expression qui lui correspond:
    SCORE1: (J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3)
    SCORE2: (J2.INDICE_SCORE_1*J2.INDICE_SCORE_2 + 1.5*J2.INDICE_SCORE_3)
    ID1: J1.ID
    ID2: J2.ID

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup je vais tenter de travailler avec ça

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/03/2007, 02h14
  2. Réponses: 3
    Dernier message: 04/05/2006, 14h00
  3. Exclure des enregistrements dans une requête
    Par r@phy dans le forum Access
    Réponses: 3
    Dernier message: 29/03/2006, 12h18

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