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 :

Récupérer les pseudos des meilleurs joueurs dans une base de données


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Récupérer les pseudos des meilleurs joueurs dans une base de données
    Bonjour !

    Je suis débutant. Je procède ainsi pour récupérer les enregistrements correspondant aux 20 meilleurs scores enregistrés dans une base de données avec php et MySQL :

    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
    19
    20
    21
    22
    23
    24
    $numScoresToGet = 20; //nombre de scores qui seront affichés
     
    mysql_connect ($host, $user, $pass);
    mysql_select_db ($database);
    $result = mysql_query ( "SELECT * FROM `tabledesscores` ORDER BY score DESC LIMIT $numScoresToGet");
     
    $echoString = "&totalScores=".$numScoresToGet; 
     
    $i = 1;
     
    	while ( $i <= $numScoresToGet){
     
    		$row = mysql_fetch_array($result);
    		extract($row);
    		$echoString .= "&player".$i."=".$row['player']."&score".$i."=".$row['score']; 
     
    			if ($i == $numScoresToGet){
    				$lowestHighScore = $score;
    			}
     
    		$i = $i + 1;
     
    	}
    	echo $echoString."&lowestHighScore=".$lowestHighScore;
    Comment modifier la requête pour qu'un pseudo n'apparaisse qu'une fois et avec son meilleur score ?

    Merci pour votre aide.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Peut-être en évitant de rappatrier toutes les colonnes avec SELECT * et en ajoutant DISTINCT en début de clause SELECT. Ça serait un bon début.
    Comme par ailleurs nous ne savons rien de cette tabletabledesscores, d'où provient-elle, quelle est sa structure, comment est-elle alimentée; il est difficile de diagnostiquer l'origine des doublons.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je m'excuse pour le manque d'informations.

    Il s'agit d'une base de données simple contenant une table "tabledesscores" avec deux champs : "player" et "score".

    A la fin d'un jeu, le score et le pseudo du joueur sont enregistrés dans la table "tabledesscores". Chaque pseudo apparaît plusieurs fois dans la base de données, avec des scores différents.

    Je me demandais donc quelle requête écrire pour afficher les 20 premiers pseudos avec leur meilleur score (ou s'il faut tout revoir et procéder autrement...).

    Merci.

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Il n'y a pas de lézard.
    Il te faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT player, MAX(score) AS must 
    FROM tabledesscores 
    GROUP BY player 
    ORDER BY must 
    LIMIT 20
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour !

    La requête ne renvoie pas le score. MAX(score) AS must semble ne pas fonctionner.
    Je l'ai remplacée par celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT player, score 
    FROM tabledesscores 
    GROUP BY player 
    ORDER BY score 
    DESC LIMIT 20
    Apparemment, ça fonctionne.

    Merci beaucoup pour votre aide.

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Tu fais bien de dire semble, car il n'y a aucune raison pour que la fonction MAX ne soit pas opérationnellle dans ce contexte.
    Le ORDER BY semble intervenir avant le GROUP BY, et ça tombe bien, mais la logique du ORDER BY était de garder les 20 premiers parmi les MAX, lesquels ne sont éligibles que dans le cas d'un GROUP BY.
    Donc, jusqu'à preuve du contraire, je maintiens ma version.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    pour reprendre la solution de Maljuna Kris, il faut l'écrire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT player, MAX(score) AS must 
    FROM tabledesscores 
    GROUP BY player 
    ORDER BY must desc
    LIMIT 20
    sinon, il va prendre le max de chaque joueur mais pour les 20joueurs ayant le plus petit score

    Pour la requête de SecondSight, elle n'est pas correcte. Seul MySQL laissera passer ce genre de requête. Quand on a une clause group by, il faut une fonction d'agrégation si celle colonne n'est pas dans le group by

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour !

    J'ai testé la requête dans phpmyadmin et j'ai finalement compris qu'il fallait que je modifie le code php également.

    Dans :
    $echoString .= "&player".$i."=".$row['player']."&score".$i."=".$row['score'];
    j'ai remplacé le dernier 'score' par 'must' et les scores apparaissent :
    $echoString .= "&player".$i."=".$row['player']."&score".$i."=".$row['must'];

    J'ai également ajouté un .$i au code qui retourne le score le plus bas :
    if ($i == $numScoresToGet){
    $lowestHighScore = $score.$i;
    }

    Merci !

Discussions similaires

  1. Récupérer des fils twitter dans une base de données ?
    Par H.ile dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2011, 09h09
  2. Réponses: 3
    Dernier message: 19/01/2010, 09h53
  3. Réponses: 2
    Dernier message: 06/04/2007, 11h48
  4. [Conception] Stocker des fichiers multimédia dans une base de données
    Par haifa84 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/03/2006, 17h47
  5. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41

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