Запрос mysqli, LIKE и AND в одном запросе не работает так, как должен - PullRequest
1 голос
/ 01 декабря 2009

, так что это мой запрос, не имеет значения, если для параметра Approved установлено значение 0 или 1, это все равно выдаст мне все строки

SELECT * 
FROM `tutorials` 
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php' 
AND approved=1

Я думаю, это из-за ИЛИ, но я могу ошибаться, если кто-то может мне помочь в этом:)

Ответы [ 3 ]

6 голосов
/ 01 декабря 2009

Попробуйте скобки

SELECT * 
FROM `tutorials` 
WHERE   (       tags LIKE '% php %' 
            OR  tags LIKE 'php %' 
            OR  tags LIKE '% php' 
            OR  tags = 'php' 
        )
AND approved=1
2 голосов
/ 01 декабря 2009

Я думаю, вам не хватает двоеточий:

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 .

1 голос
/ 01 декабря 2009

Я не получил то, что вы точно хотите. Но это может быть тот, который вы ищете

ВЫБРАТЬ * ОТ tutorials ГДЕ ( теги LIKE '% php%' OR теги LIKE 'php%' OR теги LIKE '% php' OR tags = 'php' ) И одобрено = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...