Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 février 2008
-
13 févr. 2008 à 00:42
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 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.
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 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....
Mastersam
Messages postés116Date d'inscriptiondimanche 26 septembre 2004StatutMembreDernière intervention13 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 ...