Soucis avec LEFT JOIN

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous !

Je galère un peu avec LEFT JOIN et sollicite votre aide.

Je suis entrain de faire une sorte d'échange sur mon site, un peu comme le principe de CCM (inbox)
L'auteur, l'intervenant en y ajoutant les images de profil.

J'ai fouillé un peu partout mais je n'ai pas pu avoir un résultat satisfaisant... voir même pas grand chose.
J'arrive à trouver le NIC_Handle de l'auteur, mais celui de l'intervenant, je chôme grave.

Voici mon code :
<?php try{
$MyPDO=$pdo->query("
SELECT 
			tb_user_messages_recap.Auteur,
			tb_user_messages_recap.Intervenant,
			tb_user_messages_recap.Numero,
			tb_user_messages_recap.Sujet,
			tb_user_messages_recap.Creation,
			tb_user_messages_recap.Edition,
			tb_user_messages_recap.Etat,
			tb_user.NIC_Handle,
			tb_user.Pseudo

FROM 		tb_user_messages_recap

LEFT JOIN 	tb_user ON tb_user.Pseudo = tb_user_messages_recap.Auteur OR 
			tb_user.Pseudo = tb_user_messages_recap.Intervenant
AND (  
			tb_user_messages_recap.Auteur='".$_SESSION_PSEUDO."' OR 
	  		tb_user_messages_recap.Intervenant='".$_SESSION_PSEUDO."' )

GROUP BY 
			tb_user_messages_recap.Auteur,
			tb_user_messages_recap.Intervenant,
			tb_user_messages_recap.Numero,
			tb_user_messages_recap.Sujet,
			tb_user_messages_recap.Creation,
			tb_user_messages_recap.Edition,
			tb_user_messages_recap.Etat,
			tb_user.NIC_Handle,
			tb_user.Pseudo

ORDER BY tb_user_messages_recap.Edition DESC
");
    while($data=$MyPDO->fetch(PDO::FETCH_ASSOC))
    {
?>
 
<?php echo $data["NIC_Handle"]." - ".$data["Auteur"]; ?>
<?php echo $data["NIC_Handle"]." - ".$data["Intervenant"]; ?>
 
<?php }}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} ?>


Sachant que dans ma table tb_user, chaque Pseudo est lié à son NIC_Handle, tb_user_messages_recap (Auteur, Intervenant) doivent tous les deux avoir leur NIC_Handle depuis tb_user.

Ce code duplique mes enregistrements et n'attribue pas le NIC_Handle à chaque utilisateur.

J'ai besoin d'aide et de conseils.
Merci d'avance !

1 réponse

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Im faut faire deux LEFT JOIN
    Un pour l'auteur et un pour l'autre
    1
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      SELECT 
            R.Auteur,
      			R.Intervenant,
      			R.Numero,
      			R.Sujet,
      			R.Creation,
      			R.Edition,
      			R.Etat,
      			U.NIC_Handle as NIC_Auteur,
      			U.Pseudo as Pseudo_Auteur,
                              U2.NIC_Handle as NIC_Intervenant,
      			U2.Pseudo as Pseudo_Intervenant
      FROM 	tb_user_messages_recap R
      LEFT JOIN 	tb_user  U ON U.Pseudo = R.Auteur 
      LEFT JOIN 	tb_user  U2 ON	U2.Pseudo = R.Intervenant
      WHERE	R.Auteur='".$_SESSION_PSEUDO."' 
        OR 	R.Intervenant='".$_SESSION_PSEUDO."' 
      


      NB: Comme tu peux le voir j'ai utilisé des ALIAS pour le nom des tables..... c'est tellement plus simple ensuite.. non ??!
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      J'ai encore du boulot avec les jointures ça c'est sûr et certain !
      Oui en effet, les alias sont d'une simplicité !
      Je me suis dis comprendre d'abord le principe et ensuite m'adapter aux alias... mais je crois que tu as raison !

      Encore merci pour ton aide ! vraiment !
      0