Histoire de scores

Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008 - 13 févr. 2008 à 00:42
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008 - 13 févr. 2008 à 13:52
Bonjour tout le monde, j'ai un soucis assez particulier mais je pense qu'il doit y avoir une solution.

J'ai ma table 'score' avec les champs :

ID, membre, score, time

A chaque fois que le membre en question fait un score ça ajoute une ligne,
donc un même membre peut avoir plusieurs lignes à lui qui représentent son nombre d'essais.

Ce que je veux c'est récuperer à la sortie de ma requête, la liste suivante:

membre, score maxi, time correspondant au score maxi, nombre d'essais du membre

Sachant que ces éléments doivent être classés par scores maxi descendant et limité à 20 éléments. Le gros problème dans l'histoire c'est d'arriver conserver le time qui correspond au score maxi avec une seule requête !

par exemple :

"SELECT *,max(`score`) as `maxscore`,count(`score`) as `nbscores` FROM `scores` GROUP BY `membre` ORDER BY `maxscore` DESC LIMIT 20";

donne un bon résultat sauf que le champ time ne correspond pas au maxscore, j'ai "juste" besoin d'arriver à conserver l'association time-score tout en ne conservant qu'un résultat par membre.

Après j'ai essayé des recherches imbriqué et une requête avec un DISTINCT('membre') mais rien à faire j'ai jamais ce que je veux ...

Dans le fond ça semble être un problème assez général dès qu'on parle de classement, la difficulté vient ici du fait qu'un même membre peut avoir plusieurs entrées dans la table et que je souhaite obtenir ceci en une seule requête.

Si vous avez déjà rencontré ce problème, ou si vous avez une idée je vous en serez très reconnaissant.

Merci d'avance

       

http://www.rc-bot.com/bannieres/banniere468x60.jpg

2 réponses

cs_sebastien_et_typh Messages postés 289 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 11 juin 2010 3
13 févr. 2008 à 02:54
As tu essayer avec une requete du style select ..... from ....score where time in(select time from score order by score desc limit 0,1)
ce n'est qu'une idee je ne sais pas du tout si cela fonctionne


Personne ne peut se permettre de juger l'autre....
0
Mastersam Messages postés 116 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 13 février 2008
13 févr. 2008 à 13:52
Oui j'ai tenté une recherche imbriquée mais avec ce principe je n'arrive plus à récuperer le max de chaque membre, ou alors quand j'y arrive je n'ai plus l'association. En fait je n'ai pas de meilleurs résultat pour l'instant avec une recherche imbriquée.

Je n'arrive pas à savoir comment sélectionner dans la table une ligne dont un des champ est égal au maximum du même champ dans d'autres lignes concernant le même membre. Sinon y'a la méthode avec plusieurs requêtes ... Mais j'aimerais vraiment trouver comment faire sans, il doit bien avoir une syntaxe MySQL que je n'ai pas en tête ...

Enfin merci déjà.

_________________________________________________________________________
http://www.rc-bot.com/

http://www.rc-bot.com/
0
Rejoignez-nous