У меня есть такая таблица, которая состоит из двух строк:
nombre_per | apellido_per | permisos_busqueda_per
-------------+----------------+----------------------
Mattew | Janeey | SI
Janny | Pineda | NO
Мой вопрос следующий
SELECT nombre_per, apellido_per, permisos_busqueda_per
FROM la_tabla
WHERE nombre_per LIKE '%a%' OR apellido_per LIKE '%a%' AND permisos_busqueda_per="SI"
Если я ищу только пользователей, у которых включено разрешение на поиск ( ) permisos_busqueda_per
, почему я получаю обе строки, если у Дженни не включено разрешение на поиск?
Это проблема с приоритетом операторов, как вы можете видеть в документации MySQL , оператор AND имеет приоритет над OR, это делает ваш выбор SELECT на основе этих условий:
когда на самом деле то, что вы хотите, это:
Решение простое: используйте скобки:
Попробуйте сгруппировать условия в скобках
У вас ошибка в запросе, вы должны изменить:
Для этого:
Проблема была в «или». Надеюсь, это поможет вам
Как они прокомментировали в других ответах, ваша проблема в том, что операторы в соответствии с документацией не следуют ожидаемому вами процессу; Я рекомендую, когда вы используете операции, вы делаете это следующим образом:
Разделение И в разных строках и всегда их использование
()
в каждой строке.То же самое, плюс я не уверен насчет mysql, но в sql вы должны использовать одинарные кавычки вокруг строк, т.е. ' вместо "
другие люди уже задокументировали это, но вы должны знать, что порядок факторов сильно влияет на запросы, он приносит вам два значения, потому что последнее, что он делает, это ИЛИ, поэтому вы должны поставить в круглых скобках, чтобы различать одну операцию от другой, чтобы менеджер не мог запутаться
ВЫБЕРИТЕ per_name, per_last, per_search_permissions ИЗ таблицы WHERE (per_name_LIKE '%a%' ИЛИ per_last_name LIKE '%a%') И per_search_permissions="YES"
Вы должны помнить, что порядок выполнения в этом случае после того, как идет сначала круглые скобки, а затем И, он уже выбрал все, что его имя и фамилия имеют «а», а затем переходит к проверке разрешений
надеюсь информация будет полезна