Bonjour,

Voilà, je suis confronté à un cas que je n'ai jamais rencontré.
J'ai une requête déjà pas mal dense, pour laquelle je souhaiterais ajouter des clauses spécifiques UNIQUEMENT SI certaines conditions sont remplies par les données de la ligne courante J'espère être clair.

Pour rentrer dans le détail :

Une table dans laquelle je stock des demandes, pour certaines j'ai un clé étrangère rattachée à une table contenant des données de sociétés.

Je souhaite pourvoir dire que :

Si j'ai un ID dans ma table demande, je dois valider plusieurs conditions avant de prendre la ligne dans mon recordset et si pas d'ID, alors pas de souci je prends la ligne quoi qu'il arrive.
Je pense donc qu'il faut utiliser IF() dans la clause WHERE, et pour le coup je but la dessus.
Dans mon SELECT j'ai quelques conditions que je crois devoir réintégrer dans le WHERE pour mes tests

EX :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
IF(d.insurancecompanyid IS NOT NULL AND TIMESTAMPDIFF(MINUTE, d.createdat, NOW()) <= 2400, 'true', 'false') AS insuranceexclusive
Qui retourne TRUE / FALSE si il y a une exclusivité en cours sur l'enregistrement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
d.insurancecompanyid, DATE_ADD(d.createdat, INTERVAL 2400 MINUTE) AS insuranceexclusivedat
Qui me donne une date d'expiration de l'exclusivité en fonction de la date de création de l'enregistrement.

En gros dans mon IF du WHERE, j'ai besoin de dire que SI j'ai un ID assurance, que la date n'est pas dépassée, ET que le porteur de la demande est bien présent dans une autre table de jointure que j'ai entre les companies et les users, alors je peux décider de prendre ou pas.

Je partais sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
IF(
    d.insurancecompanyid IS NOT NULL
    AND d.insurancecompanyid IS NOT NULL AND TIMESTAMPDIFF(MINUTE, d.createdat, NOW()) <= 2400, 'true', 'false') = 'true'
    AND (
        SELECT COUNT() pour savoir si j'ai un retour sur ma dernière table...
    )
)
Mais ... ben je n'y parviens pas.