Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1211 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Left Join et maximum

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Left Join et maximum

n°1129460
fluminis
Posté le 24-06-2005 à 09:02:46  profilanswer
 

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

mood
Publicité
Posté le 24-06-2005 à 09:02:46  profilanswer
 

n°1129588
cinocks
Posté le 24-06-2005 à 10:53:59  profilanswer
 

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
n°1129619
fluminis
Posté le 24-06-2005 à 11:22:16  profilanswer
 


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

n°1129649
cinocks
Posté le 24-06-2005 à 11:41:22  profilanswer
 

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


---------------
MZP est de retour
n°1129775
fluminis
Posté le 24-06-2005 à 13:32:55  profilanswer
 

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

n°1130296
fluminis
Posté le 24-06-2005 à 18:36:43  profilanswer
 

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

n°1130338
Beegee
Posté le 24-06-2005 à 19:40:35  profilanswer
 

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.

n°1130341
fluminis
Posté le 24-06-2005 à 19:46:31  profilanswer
 

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

n°1130403
mrbebert
Posté le 24-06-2005 à 21:55:23  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Left Join et maximum

 

Sujets relatifs
IE ne prend pas mon margin-left CSS[SQL] transformé une sous requete en requete avec LEFT join
Proc*C et taille maximum d'un tableauC/Proc*C et taille maximum d'un tableau
RESOLU: logo en 3 part (left-repeat center right-repeat)Probleme de JOIN (je pense)
[HTML] Combien de <DIV></DIV> maximum par page ?[MySQL] problème de left join (fusion de suppression)
Plus de sujets relatifs à : Left Join et maximum


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR