Version complète: sur le forum Webmaster Hub : Requête prise de tête
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
Kent
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.

CODE
SELECT pseudo,timeStamp,score
FROM 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.
Bourinho
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:
SQL
SELECT ga_membres.pseudo,ga_scores.timeStamp,ga_scores.score
FROM ga_scores,ga_membres WHERE ga_scores.idjeu='".$_SESSION['idJeuxEnCour']."' AND ga_scores.idmembre=ga_membres.id_membre
ORDER BY score DESC

_là, seul le meilleur score de chaque joueur devrait apparaître:
SQL
SELECT ga_membres.pseudo,ga_bestscores.timeStamp,ga_bestscores.score
FROM (SELECT max(score) as score, id_membre as id_membre, min(timeStamp) as timeStamp
FROM ga_scores WHERE ga_scores.idjeu='".$_SESSION['idJeuxEnCour']."'
GROUP BY id_membre) as ga_bestscores,ga_membres
WHERE ga_bestscores.idmembre=ga_membres.id_membre
ORDER BY score DESC


Si c'est pas tout à fait bon, ça ne doit pas en être loin!!! wink.gif

A+
Kent
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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.