Bonjour à tous,
C'est un truc qui me fait toujours taper la tête contre les murs et qui doit être simple une fois qu'on l'a fait une fois !
Mon souci est plus parlant par un exemple :
Soit une table "annonces_specific_fields" composée comme çà :
id | annonce_id | specific_field_id | real_value
Disons que j'aimerais faire la requête suivante sans OR, mais avec des AND :
1 2 3 4
| SELECT DISTINCT(annonce_id) FROM annonces_specific_fields
WHERE specific_field_id = X AND real_value <= Y
OR (specific_field_id = Z AND real_value = "toto")
OR (specific_field_id = W AND (real_value BETWEEN t AND u)) |
En fait, trouver les lignes qui valident toutes ces conditions et non pas au moins une.
Bien entendu, si je remplace les OR par des AND, çà ne va pas puisque aucune ligne ne validera plusieurs valeurs pour le champ real_value.
J'avais quelque chose qui marchait presque avec une clause EXISTS.
Voici le code avec des valeurs réelles :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
SELECT distinct(annonce_id) FROM annonces_specific_fields AS spec
WHERE specific_field_id IN
(
SELECT id FROM specific_fields WHERE slug IN ('surface','pieces')
)
AND `spec`.`real_value` <= 50
AND exists
(
SELECT annonce_id FROM annonces_specific_fields
WHERE (real_value = "2")
AND `spec`.`annonce_id` = `annonces_specific_fields`.`annonce_id`
) |
Mais le client a trouvé un cas où çà ne marche pas !
Suis-je sur la bonne voie avec cette clause EXISTS() et si oui où est mon erreur ?
Ou bien y a-t-il une autre façon de faire ?
Par avance merci pour vos éclairages !
Partager