[英]MySQL Stored procedure with multiple SELECT FROM statements from the same table
[英]Select multiple equals from same table mysql
使用php和mysql創建一個數據庫搜索系統,該系統搜索輸入值但具有下拉菜單中的固定元素
例如
SELECT * from mytable where fname LIKE '%INPUT%' or lname LIKE '%INPUT%' and city = 'Dublin';
問題是只有最后一部分正在執行,結果顯示都柏林的所有內容,而忽略了第一部分。
如何正確組織查詢?
a OR b AND c
可能無法如您所願進行評估:
SELECT 1 OR 0 AND 0;
-- 1
而是: (a OR b) AND c
其中:
SELECT (1 OR 0) AND 0;
-- 0
SQL遵循您在其他地方看到的布爾運算符的相同順序。 您必須使用括號來強制執行我認為想要的分組類型。 A or B and C
取值為A or BC
。 請嘗試以下操作:
SELECT * FROM mytable WHERE (fname LIKE '%INPUT%' OR lname LIKE '%INPUT%') AND city = 'Dublin';
這是一個簡單的邏輯問題(如果我正確理解了您的需求)。
SELECT * from mytable
where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin';
應該解決您的問題。
您想要輸入類似fname或lname且城市為Dublin的結果,但是由於操作順序 ,AND在OR之前執行。 因此,您實際上是在(原始查詢中)詢問lname就像輸入而城市是Dublin還是fname像輸入的情況。
我們通過使用括號來解決此問題,如圖所示,因為然后括號會在AND之前求值,因為括號的執行順序更高。
在布爾算術中,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'
希望對您有所幫助。
從外觀上看,我假設您要檢索以都柏林為城市且姓氏或名字與您的字符串匹配的條目。
那不是您寫的,因為AND
的優先級(之前已得到解決)比OR
更高。
您應該嘗試這樣:
SELECT * from mytable where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.