2014-04-16 54 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 
執行

因此,爲避免混淆並提高可讀性,建議在使用多種不同條件時使用括號。

相關問題