Запрос mysqli, LIKE и AND в одном запросе не работает так, как должен
-
22-07-2019 - |
Вопрос
так что это мой запрос, не имеет значения, если для параметра Approved установлено значение 0 или 1, это все равно даст мне все строки
SELECT *
FROM `tutorials`
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php'
AND approved=1
Я думаю, это из-за ИЛИ, но я могу ошибаться, если кто-то может мне помочь в этом:)
Решение
Попробуйте скобки
SELECT *
FROM `tutorials`
WHERE ( tags LIKE '% php %'
OR tags LIKE 'php %'
OR tags LIKE '% php'
OR tags = 'php'
)
AND approved=1
Другие советы
Я думаю, что вам не хватает двоеточий:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
Причина, по которой вы должны включать двоеточия, заключается в том, что операторы OR и AND имеют одинаковый уровень приоритета. Когда вы пропустите двоеточия, ваш запрос будет проанализирован как:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Особенно при использовании длинных списков операторов OR и AND в запросе рекомендуется использовать двоеточия, чтобы прояснить свое намерение. Полный список приоритетов операторов в MySQL (который обычно является общим для других диалектов SQL) см. В руководство по MySQL .
Я не получил то, что вы точно хотите. Но это может быть тот, который вы ищете
ВЫБРАТЬ * ИЗ
руководства
ГДЕ Теги ( LIKE '% php%' OR теги LIKE 'php%' OR теги LIKE '% php' OR теги = 'php' ) И утверждено = 1