“AND”和“OR”在同一个查询中是否有效?

时间:2014-04-16 05:29:24

标签: mysql sql

我正在使用一个查询,其中包含“和”和“或”逻辑。这是我的查询,

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我的管理员也没有在查询中显示任何错误。

谢谢

3 个答案:

答案 0 :(得分:3)

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

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 . "%')

答案 1 :(得分:2)

您需要尊重逻辑运算符的优先级。 and优先于or,因为乘法优先于数学中的加法。括号确保首先满足您的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 . "%')

答案 2 :(得分:2)

在SQL中(通常在所有逻辑处理器中)优先于,所以如果你这样做:

Where A and B or C

它将作为

执行
Where (A and B) or C

因此,为避免混淆并提高可读性,在使用多种不同条件时,始终建议使用括号。