Запрос mysqli, LIKE и AND в одном запросе не работает так, как должен

StackOverflow https://stackoverflow.com/questions/1824962

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top