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 !