Kent Posté 14 Janvier 2007 Posté 14 Janvier 2007 (modifié) Bonjour, je suis confronté à un soucis lors d'une requete sql. Je travail sur un site où les membres peuvent jouer et acceder à un classement voici mes tables dont j'ai besoin pour la requête. ga_jeux : cette table contient la liste des jeux disponibles. elle est consituté de deux colonne, idjeu et nom | idjeu | nom | ga_scores : cette table contient tout les scores effectué par les joueurs et se presente sous la structure suivante. | idscore | idjeu | idmembre | score | timeStamp | idscore sert à identifier le score dans la table rien de plus. idjeu pour associer ce score à tel ou tel jeux (equivalent d'une clef etrangere qui correspond à la clef primaire de la table ga_jeux. idmembre pour associer le score "idscore" effectué sur le jeu "idjeu" au membre "idmembre" . La colonne idmembre peut etre assimilé à une clef etrangere correspondante à la clef primaire de la table ga_membres. Le score, score du joueur pour ce jeu Le timeStamp , pour savoir quand le joueur as joué à un jeu pour la derniere fois. Voici enfin la table ga_membres | idmembre | pseudo | idmembre , clef primaire identifiant unique du membre pseudo, pseudonyme du membre. Ce que je souhaieterai c'est, afficher pour chaque jeux dans un ordre de score decroissant les membre y ayant joué. Voici une requete que je fais pour afficher les meilleurs joueur pour un jeu classé par score decroissant. SELECT pseudo,timeStamp,scoreFROM ga_scores,ga_membres WHERE ga_scores.idjeu='".$_SESSION['idJeuxEnCour']."'AND ga_scores.idmembre=ga_membres.id_membre GROUP BY ga_scores.idmembre ORDER BY score DESC Je souhaite en fait avoir ce resultait pour tous les jeu dont l'id est present dans la table ga_scores. Merci pour votre aide. Modifié 14 Janvier 2007 par Kent
Bourinho Posté 14 Janvier 2007 Posté 14 Janvier 2007 Salut, Je peux te dire pourquoi cela ne fonctionne pas tel quel... Tu utilises un GROUP BY...il faut donc que tu utilises des fonctions d'aggrégation (explications ici) Voilà deux requêtes différentes, je pense qu'une des deux correspond à ce que tu recherches : _ici, un même joueur pourra apparaître plusieur fois: SELECT ga_membres.pseudo,ga_scores.timeStamp,ga_scores.scoreFROM ga_scores,ga_membres WHERE ga_scores.idjeu='".$_SESSION['idJeuxEnCour']."' AND ga_scores.idmembre=ga_membres.id_membreORDER BY score DESC _là, seul le meilleur score de chaque joueur devrait apparaître: SELECT ga_membres.pseudo,ga_bestscores.timeStamp,ga_bestscores.scoreFROM (SELECT max(score) as score, id_membre as id_membre, min(timeStamp) as timeStampFROM ga_scores WHERE ga_scores.idjeu='".$_SESSION['idJeuxEnCour']."'GROUP BY id_membre) as ga_bestscores,ga_membresWHERE ga_bestscores.idmembre=ga_membres.id_membreORDER BY score DESC Si c'est pas tout à fait bon, ça ne doit pas en être loin!!! A+
Kent Posté 14 Janvier 2007 Auteur Posté 14 Janvier 2007 Merci pour ta réponse. Cependant je pense qu'il y a mésentente ou alors je ne m'exprime pas correctement. dans les requêtes que tu propose il y a le '".$_SESSION['idJeuxEnCour']."' en fait cette variable php n'est presente que lorsque je veux affiche le classement des joueurs pour un même jeu, hors ceci fonctionne deja. Ce que je voudrais c'est afficher pour chaque jeu present dans la table ga_scores (je ne doit donc pas specifié l'id du jeu ! cf : ga_scores.id_jeu = '".$_SESSION['idJeuxEnCour']."' dans tes requêtes.) les meilleurs joueurs dans un ordre décroissant, evidemment il faudra regrouper les resultats par jeux exemple. Pacman Pseudo | score Bourinho 2000 Kent 1240 Dan 600 Ceci est un exemple pour 1 jeu, ce que je voudrais c'est faire ceci pour tout les jeux dont l'id est present dans la table ga_scores J'espere avoir été un peu plus explicit.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant