[RESOLU] Recuperer la derniere donnee en regroupant pour chaque fiche

Recuperer la derniere donnee en regroupant pour chaque fiche [RESOLU] - PHP - Programmation

Marsh Posté le 06-09-2008 à 21:29:51    

Bonsoir,
 
J'ai un soucis que j'essaie de sollutionner dans tous les sens mais en vain :
- Ma table se présente ainsi :
id | idjeu | date | note
1 | 23 | 112203020 | 12
2 | 23 | 112203040 | 15
3 | 15 | 112203065 | 13
4 | 18 | 112203150 | 5
5 | 23 | 112282010 | 11
 
- Je voudrais donc recuperer dans une requete :
selectionner la derniere note enregistrée (par rapport à la date définie en UNIX) et ce pour chaque jeu.
 
J'ai essayer avec GROUP BY ; ORDER BY et LIMIT mais je n'y arrive pas.
 
 
Merci d'avance.


Message édité par jojo023 le 07-09-2008 à 15:18:52
Reply

Marsh Posté le 06-09-2008 à 21:29:51   

Reply

Marsh Posté le 06-09-2008 à 22:02:47    

Bonsoir,
 
Essaye avec max, sur la date. J'ai jamais essayé sur un champ de ce type. J'ai pas de serveur sous la main pour te le dire. Y a pas de raison.
SELECT max(date) AS last_note FROM matable GROUPE BY note
 
A plutard

Reply

Marsh Posté le 07-09-2008 à 12:00:31    

Salut cvb,
 
C'est plus ou moins une bonne idée : pour la date c'est okay ça me prend la derniere date pour chaque jeu MAIS ça ne me prend pas la note correspondante à la date en question.
 
Il faudrait en fait trouver un moyen pour inserer ce code dans le WHERE directement; du style :

Citation :

MAX(date) = matable.date


 
Non ?


Message édité par jojo023 le 07-09-2008 à 12:01:06
Reply

Marsh Posté le 07-09-2008 à 12:02:04    

SELECT idjeu, note, date
FROM tests t1
WHERE date = (SELECT MAX(date) FROM tests t2 WHERE t1.idjeu = t2.idjeu)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-09-2008 à 12:44:47    

Sielfried > Il faut que la base de donnée qu'il utilise, accepte les requêtes imbriqués :)

Reply

Marsh Posté le 07-09-2008 à 12:49:51    

Si c'est le cas en faisant cela ca fonctionne plus ou moins :
 AND date = (SELECT MAX(date) FROM jeu) AND
 
Mais ça me prend alors que la derniere date de toute la table : sans faire la distinction entre mes différents idjeu.
 
Donc dans mon exemple, ça m'affiche uniquement l'id 5 ; alors que l'id 3 et 4 aurait du etre affiché aussi.
 
Merci

Reply

Marsh Posté le 07-09-2008 à 12:59:02    

cvb > certes, mais bon ça commence à devenir rare, les SGBD qui gèrent pas ça, je crois. :o
 
jojo023 > Je comprends pas, là. D'où sortent tes "AND" ? Que donne la requête que j'ai donnée, telle quelle ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-09-2008 à 13:21:12    

Bah j'ai pleins d'instructions avant et apres pour dire que idjeu = a l'idjeu d'une autre table etc.
 
Mais concernant ta requete je ne comprend pas un truc : d'où tu sort les t1 et t2 ?
 
Merci

Reply

Marsh Posté le 07-09-2008 à 13:30:34    

jojo023 a écrit :

Bah j'ai pleins d'instructions avant et apres pour dire que idjeu = a l'idjeu d'une autre table etc.


 
Hmm... ça me semble être le but des jointures. M'enfin faudrait voir le code et ce que tu cherches à faire... :spamafote:
 

Citation :


Mais concernant ta requete je ne comprend pas un truc : d'où tu sort les t1 et t2 ?


 
Ce sont des alias de tables.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-09-2008 à 14:38:25    

sielfried a écrit :

cvb > certes, mais bon ça commence à devenir rare, les SGBD qui gèrent pas ça, je crois. :o
 
jojo023 > Je comprends pas, là. D'où sortent tes "AND" ? Que donne la requête que j'ai donnée, telle quelle ?


 
 
re,
 
Je suis bien d'accord mais comme il n'as pas spécifié la SGBD qu'il utilise, je prefère le préciser :)

Reply

Marsh Posté le 07-09-2008 à 14:38:25   

Reply

Marsh Posté le 07-09-2008 à 14:47:12    

Ta methode sielfried semble fonctionner sans tout mes AND derriere.
Je vous tiens au courant d'ici peu.
 
Merci toujours à tous les deux.

Reply

Marsh Posté le 07-09-2008 à 15:10:03    

Bon alors voila ce que j'ai fait ; le probleme c'est qu'il me faut rajouter d'autres tables et d'autres instructions WHERE par rapport à ces tables (à chaque fois que j'essaie un truc ca me fait tout planter et ca met 107 ans a redemarrer) :
 
$reponse = mysql_query(sprintf('SELECT t1.date as datej, t1.note as notep FROM jeu t1 WHERE t1.date = (SELECT MAX(date) FROM jeu t2 WHERE t1.idjeu = t2.idjeu) AND t1.iduser = %d', mysql_real_escape_string($_GET['user'])));

Reply

Marsh Posté le 07-09-2008 à 15:18:32    

Ha enfin c'est bon : c'est parce que j'ai demander trop de choses a mon ordi que ca commence a planter mon systeme.
 
Mais c'est bon maintenant ca marche vraiment PARFAITEMENT : vous etes franchement geniaux (et je dis pas ca parce que vous m'avez recolu ce problème).
 
Merci cvb et sielfried d'avoir pris le temps de me repondre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed