У меня есть следующий запрос:ИЛИ конфликт между другими условиями
SELECT * FROM `Contacts`
WHERE `Zona` = '1'
AND `Responsable` = '9'
AND `AllowComercialVisit` = 'Call_Again'
-- the problem are OR's --
OR `AllowComercialVisit` = 'Busy'
OR `AllowComercialVisit` = 'Not_answered'
-- the problem are OR's --
AND `DateRecall` <= '2016-06-20 13:04:52'
AND `DateRecall` >= '2016-06-20 12:39:52'
ORDER BY `DateRecall` ASC LIMIT 1
Проблема заключается в том, что запрос должен только показывает строки между первым и вторым «DateRecall», но вернуть все строки с 'Call_Again', 'Busy' и 'Not_answered' без фильтрации даты.
Любое решение будет оценено!
Никогда, никогда, * когда-либо * Смешайте 'OR' с' AND', не используя круглые скобки, чтобы сделать вашу группу явной, на любом языке. Даже если это не требуется строго в некоторых ситуациях, никто не сможет понять ваши намерения без них. – jpmc26
Хотя я не согласен с тем, что «никто не сможет понять ваши намерения без них», я абсолютно согласен с тем, что всегда использую круглые скобки. Единственное исключение, которое я делаю, - это когда вы делаете ровно одно сравнение на поддерживающих его языках, таких как Python; во всех остальных случаях скобки не только делают ваш код более удобочитаемым, но и защищают вас от порядка операций (и других, более трудных для количественной оценки проблем, таких как некоторые логические причуды в PHP, которые не имеют логического смысла, но по-прежнему предотвращаются). Для SQL-запросов также рассмотрите уровни отступов для ясности вложенности. – kungphu