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 :

[MySQL] Selectionner le numéro d'un enregistrement


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Points : 28
    Points
    28
    Par défaut [MySQL] Selectionner le numéro d'un enregistrement
    Bonsoir à tous.

    Je suis en train de réaliser un classement pour un jeu. J'aimerai que le joueur arrive directement sur la page du classement ou il est présent, et pour ca j'ai besoin de savoir quelle est la place de ce joueur.

    En fait ce que je veux savoir c'est quel est sa position si je faisais la requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from general order by score DESC
    Exemple:
    Joueur 1 | 100 pts
    Joueur 2 | 600 pts
    Joueur 3 | 50 pts
    Joueur 4 | 300 pts
    Joueur 5 | 800 pts

    A ce moment la ma requête retournerait 3 pour le Joueur 4.

    J'espère que vous pourrez m'aider, bonsoir !
    Alors je signe ici...
    sccccrchttttrrrchhhh

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count(*) from general where score>=(select score from general where joueur='4') ;
    Je ne suis pas trop sur de la syntaxe pour les requêtes imbriquées, mais ça doit être un truc du genre.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Je pense que c'est bien compliqué que ça n'en a l'air. Pour l'instant je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT JOUEUR, SCORE, ( SELECT CASE COUNT(*)
                                     WHEN 0 THEN 1
                                     ELSE COUNT(*)
                                     END
                            FROM GENERAL G2
                            WHERE G2.JOUEUR <> G1.JOUEUR
                            AND G2.SCORE >= G1.SCORE ) AS CLASSEMENT
    FROM GENERAL G1
    en sachant très bien que ma solution ne gère pas les ex aequo ; ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JOUEUR / SCORE / CLASSEMENT
    J1 / 300 / 1
    J2 / 200 / 2
    J3 / 200 / 2
    J4 / 150 / 4 -- ici, j'obtiens 3 (il faudrait compter le nb d'ex aequo)
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Je pense que j'ai un peu plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT joueur, Classement=(SELECT COUNT(*)
    		                     FROM general
    	                        WHERE score >= ge.score)
    FROM general ge
    ORDER BY score DESC

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par KrusK
    Je pense que j'ai un peu plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT joueur, Classement=(SELECT COUNT(*)
    		                     FROM general
    	                        WHERE score >= ge.score)
    FROM general ge
    ORDER BY score DESC
    Comment fonctionne cette syntaxe où tu fais une affectation pour une colonne du SELECT ?
    C'est la 1ère fois que je la vois et je voudrais bien que tu m'expliques comment cela fonctionne parce que InterBase refuse cette syntaxe (erreur au niveau du "=").

    D'autre part, ta requête n'est pas plus simple mais plus fausse parce qu'elle va retourner un classement de 0 pour le joueur ayant le score le plus important ; d'où l'utilité de mon bloc CASE
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Si le classement= t'embête, tu peux le remplacer par un AS Classement comme tu l'as fait, cela revient au même, en fait cela dépend du SGBD que tu utilises (sur SQL Server, ma requête telle que je l'ai faite marche parfaitement).

    Citation Envoyé par Magnus
    D'autre part, ta requête n'est pas plus simple mais plus fausse parce qu'elle va retourner un classement de 0 pour le joueur ayant le score le plus important ; d'où l'utilité de mon bloc CASE
    J'ai testé ma requête et elle ne me renvoit pas de 0 pour la première ligne, mais bien 1

    Si j'avais mis la ca commencerait par 0, mais en mettant >= ca comence par 1

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ok & merci pour les explications sur l'affectation dans le SELECT.

    Par contre, je me trompais bien concernant le classement à 0 ou à 1 du joueur ayant le score le + élevé (mea culpa) et
    d'autre part j'ai du me tromper dans mon exemple concernant les ex-aequo (décidément je ne suis pas en super forme aujourd'hui) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JOUEUR / SCORE / CLASSEMENT 
    J1 / 300 / 1 
    J2 / 200 / 3
    J3 / 200 / 3
    J4 / 150 / 4
    Bref, tout ça pour dire que si le classement à obtenir est bien celui au-dessus alors ma 1ère requête doit être totalement juste
    mais celle de KrusK est plus simple pour le même résultat
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Merci à tous

    J'ai eu ma solution.

    Mais wow, c'est quand même pas mal compliqué pour un problème si simple
    Alors je signe ici...
    sccccrchttttrrrchhhh

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

Discussions similaires

  1. Récupérer le numéro du dernier enregistrement
    Par Bazooka dans le forum Access
    Réponses: 3
    Dernier message: 26/01/2007, 23h22
  2. mysql : selectionner des mois.
    Par hpfx dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/10/2006, 09h20
  3. [MySQL] Comment connaître le numéro d'un enregistrement ?
    Par Cazman dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 31/07/2006, 12h01
  4. Afficher le numéro de l'enregistrement en cour
    Par adrix26 dans le forum Access
    Réponses: 6
    Dernier message: 27/07/2006, 11h24
  5. Réponses: 1
    Dernier message: 16/09/2005, 14h07

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