Mysql “AND”和“AND”或“OR”是否在同一查询中起作用?

Mysql “AND”和“AND”或“OR”是否在同一查询中起作用?,mysql,sql,Mysql,Sql,我使用了一个同时具有and和or逻辑的查询。这是我的查询 select * from products_event where products_event.active > 0 and is_event_activated > 0 and is_user_activated > 0 and quantity > 0 and products_event.name like '%" . $search_ke

我使用了一个同时具有and和or逻辑的查询。这是我的查询

select * 
from products_event  
where products_event.active > 0 
      and is_event_activated > 0 
      and is_user_activated > 0 
      and quantity > 0  
      and  products_event.name like '%" . $search_keyword . "%' 
      or products_event.short_desc like '%" . $search_keyword . "%'
我得到了一个结果,但它也列出了活动列的值为“0”的产品等等

php my admin也没有在查询中显示任何错误


谢谢

您需要添加括号。试试这个:

select * 
from products_event  
where products_event.active > 0 
      and is_event_activated > 0 
      and is_user_activated > 0 
      and quantity > 0  
      and  
      (products_event.name like '%" . $search_keyword . "%' 
      or products_event.short_desc like '%" . $search_keyword . "%')

您需要尊重逻辑运算符的优先级。并且优先于或,就像在数学中乘法优先于加法一样。括号确保首先满足您的或条件

您的第一个查询在语法上也是正确的,因此您自然不会看到任何错误

select * 
from products_event  
where products_event.active > 0 
  and is_event_activated > 0 
  and is_user_activated > 0 
  and quantity > 0  
  and  
  (products_event.name like '%" . $search_keyword . "%' 
  or products_event.short_desc like '%" . $search_keyword . "%')

在SQL中,通常在所有逻辑处理器中,并且优先于或,因此如果您这样做:

Where A and B or C
它将被执行为

Where (A and B) or C
因此,为了避免混淆和提高可读性,在使用多个不同条件时,始终建议使用括号