Aller au contenu

Requête prise de tête


Sujets conseillés

Posté (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,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.

Modifié par Kent
Posté

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.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:

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!!! ;)

A+

Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...