Left Join et maximum

Left Join et maximum - SQL/NoSQL - Programmation

Marsh Posté le 24-06-2005 à 09:02:46    

Bonjour,
 
Je me prends la tete sur une requete sql (j'utilise mysql)
 
J'ai 2 tables :

Code :
  1. forum_message(id,idthread,date,pseudo,message)
  2. forum_thread(id,idforum,titre,statut)


Je souhaite recupérer en une requete la liste des threads pour un idforum donné et egalement la date du dernier message ainsi que le pseudo de la personne qui a ecrit en dernier.
 
Mais je n'arrive pas a ecrire de LEFT JOIN correct :

Code :
  1. SELECT s.id,s.titre,s.statut,m.date,m.pseudo FROM forum_thread s LEFT JOIN forum_message m ON s.id=m.idthread WHERE s.idforum=1 AND s.statut IN ('write','readonly') GROUP BY s.id


En effet ça retourne les informations a propos du premier message de chaque sujet.
J'ai essayé un ORDER BY mais il est appliqué apres le GROUP BY donc est sans effet.
J'ai egalement tenté un MAX(m.date) mais je ne recupere pas le pseudo correspondant...
 
Une idée ?
Merci d'avance
 
Fluminis

Reply

Marsh Posté le 24-06-2005 à 09:02:46   

Reply

Marsh Posté le 24-06-2005 à 10:53:59    

Code :
  1. SELECT s.id,s.titre,s.statut,m.date,m.pseudo FROM forum_thread s LEFT JOIN forum_message m ON s.id=m.idthread WHERE s.idforum=1 AND s.statut IN ('write','readonly') GROUP BY s.id, s.titre,s.statut
  2. HAVING m.date = MAX(m.date)


---------------
MZP est de retour
Reply

Marsh Posté le 24-06-2005 à 11:22:16    


j'peux pas tester là de suite mais je crain que la requete ne fournisse plus aucun resulat car MAX(m.date) sera egale au maximum de tous les champs de la table soit "le" dernier message posté et pas uniquement le dernier message posté pour le thread en question

Reply

Marsh Posté le 24-06-2005 à 11:41:22    

Non, c'est à ca que sert un group by. il va determiner le max pour chaque id, titre, statut.


---------------
MZP est de retour
Reply

Marsh Posté le 24-06-2005 à 13:32:55    

je test ca ce soir et te dis si ça fonctionne

Reply

Marsh Posté le 24-06-2005 à 18:36:43    

Helas c'est bien ce que je pensais, si je rajoute having je n'ai pas de résultat.  
On dirait que le MAX(m.date) prend le maximum de la table complete.
 
Une autre idée ?
 
Merci d'avance

Reply

Marsh Posté le 24-06-2005 à 19:40:35    

Tu peux créer une table temporaire dans laquelle tu stoques la dernière date de message pour chaque forum.
Ensuite, tu fais la jointure qui va bien sur cette table pour récupérer le reste.

Reply

Marsh Posté le 24-06-2005 à 19:46:31    

ha interessante solution comment utilise t on les tables temporaires en mysql ? Je sais utiliser les views en SQL mais en mysql ... ?

Reply

Marsh Posté le 24-06-2005 à 21:55:23    

CREATE TEMPORARY TABLE toto( .... ;)  
La table sera détruite automatiquement dès la déconnexion.

Reply

Sujets relatifs:

Leave a Replay

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