requete SQL avec Max()

Eléphanteau du PHP | 27 Messages

18 juil. 2007, 21:05

Bonjour,

j'ai un soucis avec une requete sql qui ne fait pas ce que j'aimerai faire...

Voici un exemple de la table


id | user_id | score | date
1----- 1------- 50 ----2007-07-17
1 ---- 1 ------ 80 ----2007-07-18
1-----2-------50 ------2007-07-17



J'aimerai recupérer le plus haut score de chaque user_id avec leurs date respective sans doublon.
Voici ma requete simplifier avec les éléments en questions

SELECT MAX( score ), date FROM la_table GROUP by user_id ORDER by score ASC

la ca me récupère pour l'user_id=1
- score=80
- date=2007-07-17

le problème est que la date ne correspond pas a la ligne du score 80, mais forcément car ca prend la premier user_id et ca cherche son score maximum....
Avez vous une solution pour éviter les doublons et récupérer les bonnes infos?
merci

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 juil. 2007, 21:42

C'est simple, il suffit de

Eléphanteau du PHP | 27 Messages

18 juil. 2007, 23:32

ah y a du avoir un problème dans le post!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 juil. 2007, 02:00

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.


Dans ta requête tu essayes de regrouper les résultats selon le champ user_id (dans ton group by), mais celui-ci n'apparait pas dans la liste des éléments à récupérer.
A l'inverse tu récupères le champ date, mais tu ne spécifies pas qu'il doit être groupé...

Un autre sgbd te retournerait une erreur.. mysql te retourne un résultat, mais qui n'a vraissemblablement pas grand sens... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

19 juil. 2007, 09:34

ah oui désolé pour le mauvais emplacement, je voulais indiquer un problème php puis au dernier moment j'ai préférer celui-la.

En effet, dans ma requete initiale je recupere le user_id.

SELECT MAX( score ), date, user_id FROM la_table GROUP by user_id ORDER by score ASC

J'ai essayé ça :
SELECT MAX( score ), date, user_id FROM la_table GROUP by user_id, date ORDER by score ASC

mais du coup j'ai 2occurences avec user_id=1

ViPHP
ViPHP | 928 Messages

19 juil. 2007, 09:48

Bonjour,
normalement cette requête devrait marcher (necessite MySQL 4.1 ou 5 au minimum cependant) :

Code : Tout sélectionner

SELECT t1.* FROM ma_table t1 WHERE t1.score = ( SELECT MAX(score) FROM ma_table t2 WHERE t1.user_id = t2.user_id )
Modifié en dernier par Genova le 19 juil. 2007, 11:00, modifié 1 fois.

Eléphanteau du PHP | 27 Messages

19 juil. 2007, 10:21

merci beaucoup ca marche parfaitement!
J'avais pensé a faire une requete imbriqué mais pas comme ça!

ViPHP
ViPHP | 928 Messages

19 juil. 2007, 10:23

Aucun problème, j'avais buté un bon moment sur le même problème que toi ...
ah les joies du SQL :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 juil. 2007, 10:43

J'espère au moins que toojee à compris la requête :?
Tu aurais pu mettre un minimum d'explications :cry:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 juil. 2007, 10:46

Modération :
toojee, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 27 Messages

19 juil. 2007, 10:49

oui oui j'ai compris la requete, j'été obligé car j'ai du réadapté a ma requete plus complexe.

Je met résolu donc! merci!

ViPHP
ViPHP | 928 Messages

19 juil. 2007, 10:55

Je viens de me rendre compte que le GROUP BY user_id était inutile en fait, donc tu peux le supprimer.