Bonjour,
Je bloque sur une requête imbriquée sur un left join. Je vous soumets mon problème en espérant que vous puissiez m'aider.
J'ai une table de contacts avec entre autres le champ idcontact.
Une table event avec entre autres les champs idcontact / idevent / type / datecrea (date de création).
La liaison est de type 1-N. 1 contact, plusieurs événements.
Dans ma table event, j'ai plusieurs types possibles :
- type1
- type2
- type3
- type4
Je cherche à récupérer dans une requête tous les contacts qui ont au moins un événement en excluant les contacts qui ont un événement de type "type2" sauf s'il existe un événement de type "type1" dont la date de création est supérieure à la date de création de l'événement "type 2"
Voici ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select contacts.idcontact from contacts left join evenements on contacts.idcontact = evenements.idcontact left join (select idcontact, dateenr from evenements where type = 'type1' order by dateenr DESC limit 1) as infotop on infotop.idcontact = contacts.idcontact left join (select idcontact,dateenr from evenements where type = 'type2' order by dateenr DESC limit 1) as ttop on ttop.idcontact= contacts.idcontact where ttop.dateenr < infotop.dateenr group by contacts.idcontact
La requête fonctionne, sauf qu'elle ne prend pas en compte la notion de contact. Je m'explique. Il suffit qu'un contact ait un événement de type "type2" avec une date la plus récente en base pour que les autres contacts ne s'affichent plus.
Avez-vous une idée pour m'aider ?
Partager