Problème de requete select

Salut à tous,

Voilà, j’ai encore un petit problème sur une requête, ou j’ai un détail qui m’échappe !
J’ai une base mysql avec une table nommée ultrastar qui contient les données suivantes (échantillon):

Chanson				niveau		joueur	score	date
Creep				0		AAA	9680	09-07-2008
Creep				0		BBB 	9670	12-07-2008
Come As You Are 		0		BBB 	9640	12-07-2008
Imagine 			0		CCC 	9360	12-07-2008
With or without you 		0		AAA 	9360	14-07-2008
The Show Must Go On		0		AAA 	9260	09-07-2008
Creep			 	0		BBB 	9250	12-07-2008
Come As You Are 		1		BBB 	9220	12-07-2008
Come As You Are 		0		CCC 	9200	14-07-2008
With or without you 		0		BBB 	9200	12-07-2008
Come As You Are 		0		AAA 	9160	09-07-2008
Where did you sleep last night	0		BBB 	9160	12-07-2008
Creep 				0		AAA 	9030	12-07-2008

La requete que je souhaite faire est la suivante : je veux prendre le meilleur score de chaque joueur pour chaque chanson pour chaque niveau.
Donc en gros, je ne veux pas me soucier de l’information “date du score”, cependant, je souhaite malgré tout qu’elle apparaisse dans le résultat final.

J’ai donc écrit qqchose comme ça :

'SELECT chanson, niveau, joueur as player, max(score) as best, date from ultrastar GROUP BY joueur, niveau, chanson ORDER BY '.$sort.' '.$sens;

Problème : il m’affiche bien les lignes souhaitées, mais la valeur pour la colonne “date” n’est pas la bonne, par exemple il va me sortir un truc du style :
Creep 0 AAA 9680 12-07-2008
au lieu de :
Creep 0 AAA 9680 09-07-2008

Il me sort donc bien la liste des meilleurs scores par joueur par chanson, mais il n’affiche pas forcément la bonne date en face…

J’ai essayé d’ajouter “date” au GROUP BY, mais là du coup il me ressort toutes les lignes de la table (sans tenir le max(score) donc).

Comme m’en sortir ?

Merci de votre aide, par avance !
Edité le 16/07/2008 à 15:55

Normal: tu fais une requête par date, alors il t’ajoute la première date du groupement.

Si tu veux obtenir la bonne date, faut faire une jointure je dirais.

Genre:

select S.chanson, S.niveau, S.joueur as player, S.score as best, S.date
from (SELECT chanson, niveau, joueur as player, max(score) as best FROM  ultrastar GROUP BY joueur, niveau, chanson) U
inner join ultrastar S on S.joueur = U.player and S.niveau = U.niveau and S.chanson = U.chanson and U.best = S.score

Salut Sans-Nom,

Merci beaucoup pour ton aide, effectivement ça fonctionne (aux erreurs de syntaxe près) !
J’avais aussi écrit quelque chose qui s’approchait de ça sans parvenir à comprendre exactement ou ça ne marchais pas.

Merci encore !