2017-07-25 69 views
0

創建,搜索使用PHP和MySQL選擇多個從同一表中的MySQL

例如,用於將輸入值但具有從下拉的固定元件的數據庫搜索系統等於

SELECT * from mytable where fname LIKE '%INPUT%' or lname LIKE '%INPUT%' and city = 'Dublin'; 

問題是隻有最後一部分正在執行,結果顯示了一切從都柏林和忽略第一部分。

如何正確構建我的查詢?

回答

-1

試試吧,因爲你應該尊重操作的優先級:

SELECT * 
FROM mytable 
WHERE (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin'; 
+0

儘量不只是添加代碼。嘗試添加您的文章的解釋/學習課程。 –

4

只要你想a OR b AND c可能無法評價:

SELECT 1 OR 0 AND 0; 
-- 1 

相反:(a OR b) AND c其中:

SELECT (1 OR 0) AND 0; 
-- 0 
+0

邏輯上有用的答案+1 –

+0

這不適用於運營商的優先級,所以我也接受@tadman的回答 – Varshaan

+1

經過一些調整,這個工作很好!謝謝 –

0

SQL遵循與其他布爾運算符相同的順序這裏。您必須使用括號來強制執行我認爲您想要的分組類型。 A or B and C因爲您的評估結果爲A or BC。請嘗試以下操作:

SELECT * FROM mytable WHERE (fname LIKE '%INPUT%' OR lname LIKE '%INPUT%') AND city = 'Dublin';

0

這是一個簡單的邏輯問題(如果我正確地瞭解您的需求)。

SELECT * from mytable 
     where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin'; 

應該解決您的問題。

您希望得到輸入類似fname或lname且城市爲Dublin的結果,但由於order of operations,AND在OR之前執行。所以,你真的要求(在你的原始查詢中)lname與輸入相同且城市是Dublin的情況,或者fname就像輸入。

我們通過使用括號解決了這個問題,如圖所示,因爲它們在AND之前被評估,因爲括號在執行中有更高的順序。

0

在布爾運算中,AND優先於OR(如乘法和除法在正常算術中優先於和和減法)。

在你的where子句中,你寫的:

fname LIKE '%INPUT%' or lname LIKE '%INPUT%' and city = 'Dublin' 

這個缺省:

fname LIKE '%INPUT%' or (lname LIKE '%INPUT%' and city = 'Dublin') 

但你可能想這樣做,(你必須使用括號):

(fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin' 

我希望它有幫助。

0

從外觀上看,我假設你想要檢索以都柏林爲城市姓氏或與你的字符串匹配的名字的條目。

這不是你寫的,因爲ANDOR更高的優先級(它之前解決)。

你應該試試這個:

SELECT * from mytable where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin';