Я новичок в PHP и пытаюсь выбрать записи (для поиска) в своей таблице, где месяц является статическим, а другие столбцы изменяются.
Ниже приведен запрос:
SELECT *
FROM issue
WHERE month = "Apr 2019"
AND issue LIKE "%ekh%"
OR issue_type LIKE "%ekh%"
OR facility LIKE "%ekh%"
OR issue_id LIKE "%ekh%"
OR priority LIKE "%ekh%"
ORDER BY issue_id DESC
Это скорее возвращает все строки, которые удовлетворяют подобным предложениям, даже если месяц не = «Апрель 2019».
Исправьте скобки.
В алгебре операция AND
выполняется перед операцией OR
. Это то же правило в вашем предложении WHERE
.
Вы можете исправить это с помощью круглых скобок следующим образом:
SELECT *
FROM issue
WHERE month = "Apr 2019"
AND (issue LIKE "%ekh%"
OR issue_type LIKE "%ekh%"
OR facility LIKE "%ekh%"
OR issue_id LIKE "%ekh%"
OR priority LIKE "%ekh%")
ORDER BY issue_id DESC
Когда mysql попадает первым or
, он автоматически возвращает все, потому что or something is true
. Поэтому вы должны использовать круглые скобки:
SELECT *
FROM issue
WHERE month = "Apr 2019" AND
(issue like "%ekh%" OR
issue_type like "%ekh%" OR
facility like "%ekh%" OR
issue_id like "%ekh%" OR
priority like "%ekh%")
ORDER BY issue_id DESC
Поместите все утверждения
like
в круглые скобки, чтобы у вас былоmonth = "XX" and (issues like "XX" etc)
.