Bonjour, après 3 heures de combat archarné, je viens demander de l'aide..
j'explique tout bien, et je ne suis pas loin de la bonne syntaxe, merci infiniement de votre aide.
voici mon contexte :
- j'ai une table "mail" avec les champs id_client, id_sujet, id_exp
si le client envoie un mail, son id est stoqué dans id_client. s'il le reçoit, son id est dans id_exp.
- j'ai une table "archive" avec les champs id_client, et id_sujet
lorsque le client souhaite archiver un sujet, j'enregistre la ligne avec son id et l'id du sujet.
je souhaite obtenir la liste des sujets que le client a reçu ou envoyé (id_client = $id_client ou id_exp=$id_client de la table mail) dont le sujet n'est pas dans la table des archives (id_sujet de l'id_client)
après avoir essayé les left join, not in et autres, voici où j'en suis :
cette requête ci-dessous n'affiche pas les sujets qui sont dans la table archive (youpi), mais ça affiche tous les autres sujets, même ceux dont l'expéditeur ou le destinataire n'est pas le client. normal, je ne l'ai pas spécifié.
je le spécifie donc, en ajoutant AND...après la requête not exists. résultat, j'affiche tous les sujets, mais même ceux qui sont dans la table archive (beu)... il ne tient donc plus compte du not exists.
cette requete fait EXACTEMENT L'INVERSE de ce que je veux :
mais je ne trouve pas l'inverse de LEFT OUTER JOIN et mettre != au lieu de = ne fonctionne pas.
au secooooooouuuuurs !!!
Elizabeth
Modifié par elizabeth (01 Dec 2011 - 12:57)
j'explique tout bien, et je ne suis pas loin de la bonne syntaxe, merci infiniement de votre aide.
voici mon contexte :
- j'ai une table "mail" avec les champs id_client, id_sujet, id_exp
si le client envoie un mail, son id est stoqué dans id_client. s'il le reçoit, son id est dans id_exp.
- j'ai une table "archive" avec les champs id_client, et id_sujet
lorsque le client souhaite archiver un sujet, j'enregistre la ligne avec son id et l'id du sujet.
je souhaite obtenir la liste des sujets que le client a reçu ou envoyé (id_client = $id_client ou id_exp=$id_client de la table mail) dont le sujet n'est pas dans la table des archives (id_sujet de l'id_client)
après avoir essayé les left join, not in et autres, voici où j'en suis :
cette requête ci-dessous n'affiche pas les sujets qui sont dans la table archive (youpi), mais ça affiche tous les autres sujets, même ceux dont l'expéditeur ou le destinataire n'est pas le client. normal, je ne l'ai pas spécifié.
$query_sujets_tries = "SELECT * FROM mail WHERE NOT EXISTS(SELECT * FROM archive WHERE mail.id_sujet=archive.id_sujet and id_client='$id_client') GROUP BY mail.id_sujet ORDER BY mail.id_mail desc";
je le spécifie donc, en ajoutant AND...après la requête not exists. résultat, j'affiche tous les sujets, mais même ceux qui sont dans la table archive (beu)... il ne tient donc plus compte du not exists.
"SELECT * FROM mail WHERE NOT EXISTS(SELECT * FROM archive WHERE mail.id_sujet=archive.id_sujet and id_client='$id_client')AND mail.id_client='$id_client' OR mail.id_dest='$id_client' GROUP BY mail.id_sujet ORDER BY mail.id_mail desc";
cette requete fait EXACTEMENT L'INVERSE de ce que je veux :
// j'obtiens les sujets qui sont dans la table archive
$query_sujets_tries = "SELECT * FROM archive LEFT OUTER JOIN mail ON mail.id_sujet = archive.id_sujet WHERE archive.id_client='$id_client' AND mail.id_client='$id_client' GROUP BY mail.id_sujet ORDER BY mail.id_mail desc";
mais je ne trouve pas l'inverse de LEFT OUTER JOIN et mettre != au lieu de = ne fonctionne pas.
au secooooooouuuuurs !!!

Elizabeth
Modifié par elizabeth (01 Dec 2011 - 12:57)