2015-11-08 61 views
-1

所以我有以下MySQL查詢,這工作,但不正確的做法:MySQL查詢不符合條件

 
SELECT * 
FROM (`CriteriaItems`) 
INNER JOIN `Address` 
    ON `Address`.`address_id` = `CriteriaItems`.`address_id` 
WHERE `criteria_id` = '2' 
    AND `status` = 'published' 
    AND `mls_id` LIKE '%123%' 
    OR `Address`.`address` LIKE '%123%' 
LIMIT 10 

的問題是,我看到它返回的結果也有「狀態」 =「刪除「,這是因爲``地址.地址LIKE '%123%'如果我刪除它的作品,但我需要這個。

所以suposed在地址表中搜索爲好,但只有基於CriteriaItems`.`address_id

+0

您需要'WHERE'子句在括號中。或者,也許是'AND'而不是'OR'。 –

回答

3

其因AND運營商具有比OR更高的優先級,現在您的查詢是這樣工作的。

WHERE `criteria_id` = '2' 
AND (`status` = 'published' AND `mls_id` LIKE '%123%') 
OR `Address`.`address` LIKE '%123%' LIMIT 10 

更多這方面的信息可以發現here

所以你需要使用括號申請條件適當

WHERE `criteria_id` = '2' 
AND `status` = 'published' AND 
(`mls_id` LIKE '%123%' OR `Address`.`address` LIKE '%123%') 
LIMIT 10 
1

你需要用OR帶支架:

SELECT * 
FROM `CriteriaItems` 
JOIN `Address` 
    ON `Address`.`address_id` = `CriteriaItems`.`address_id` 
WHERE `criteria_id` = '2' 
    AND `status` = 'published' 
    AND (`mls_id` LIKE '%123%' OR `Address`.`address` LIKE '%123%') 
LIMIT 10; 

還可以考慮使用ORDER BY獲得穩定的結果。

簡單的布爾邏輯:

p1 AND p2 AND p3 OR p4 is true <=> (p1 AND p2 AND p3) is true OR p4 is true 

我想你想:

p1 AND p2 AND (p3 OR p4) 
+1

您應該添加一個解釋*爲什麼*這是解決方案 –