Les deux seraient valides, mais depuis AND
a une priorité plus élevée que OR
, ils signifieraient différentes choses :
- Votre première requête entre parenthèses sélectionnerait les lignes supprimées avec les types 3, 4, 5
- Votre deuxième requête entre parenthèses sélectionnerait toutes les lignes avec les types 3, 5, en plus des lignes supprimées de type 4 ; c'est la même signification que dans la requête d'origine sans parenthèses.
Vous pouvez éviter toute confusion en utilisant l'opérateur IN
, comme ceci :
SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;
ou si vous vouliez le deuxième sens
SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)