我正在使用一个查询,其中包含“和”和“或”逻辑。这是我的查询,
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我的管理员也没有在查询中显示任何错误。
谢谢
答案 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
因此,为避免混淆并提高可读性,在使用多种不同条件时,始终建议使用括号。