2014-04-16 30 views
0

我使用的是查询它在其中既有“与”和“或” logic.Here是我的查询,“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我的管理员也没有在查询中显示任何错误。

谢谢

回答

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

谢谢他的工作。 – prakash

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

在SQL(和通常所有的逻辑处理器)拥有超过或者优先,因此如果你这样做:

Where A and B or C 

它将作为

Where (A and B) or C 
执行

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

相关问题