Bonjour.
Je cherche à rendre conditionnel la prise en compte d'un paramètre dans une requêtes MySQL.
En fonction du fait qu'une association existe sur une table, je dois tester plusieurs conditions dans le but de définir si oui ou non l'enregistrement sera dans mon résutats.
C'est OK sauf dans un cas de figure qui est le suivant.
La requête est importante donc je limite ici à la partie qui pose souci.
J'ai besoin de retourner l'enregistrement dans plusieurs cas :
SINON
Je dois également m'assurer que la sous requête présente dans le code ci-dessous retourne au moins 1 enregistrement , mais uniquement dans le cas ou les conditions précédentes sont TRUE
Je ne sais pas si je suis clair :(
AND (
IF(d.insurancecompanyid IS NOT NULL
AND TIMESTAMPDIFF(MINUTE, d.createdat, NOW()) <= 2400
AND (
SELECT COUNT(insuranceagreements.insurancecompanyid)
FROM insuranceagreements
WHERE insuranceagreements.insurancecompanyid = d.insurancecompanyid
AND insuranceagreements.customerid = a.customerid
) > 0, 'true', 'false')
) = 'true'
D'avance merci pour votre aide
Bonjour,
Au final la meilleure approche à été d'utiliser la fonction CASE() ce qui permet à la fois d'être opérationnel et plus lisible.
AND CASE
WHEN d.insurancecompanyid IS NULL THEN 1
WHEN d.insurancecompanyid IS NOT NULL
AND TIMESTAMPDIFF(MINUTE, d.createdat, NOW()) > i.insuranceexclusiveduration THEN 1
WHEN d.insurancecompanyid IS NOT NULL
AND TIMESTAMPDIFF(MINUTE, d.createdat, NOW()) <= i.insuranceexclusiveduration
AND (
SELECT COUNT(insuranceagreements.insurancecompanyid)
FROM insuranceagreements
WHERE insuranceagreements.insurancecompanyid = d.insurancecompanyid
AND insuranceagreements.customerid = a.customerid
) > 0 THEN 1
END