[英]Query returns all the rows
為什么此查詢返回我符合OR LIKE
條件的所有行並跳過doctorLang
。 city
。 我的意思是,我得到的是所有城鎮的所有行,而不僅僅是某些行。
SELECT `doctor`.`id`, `doctorLang`.`first_name`, `doctorLang`.`second_name`, `doctorLang`.`city`, `doctorLang`.`hospital_name`
FROM `doctor` LEFT JOIN `doctorLang` ON `doctor`.`id`=`doctorLang`.`doc_id`
WHERE `doctorLang`.`city`='Пловдив'
AND `doctorLang`.`language`='bg'
AND `doctor`.`active`=1
AND `doctorLang`.`first_name` LIKE '%йло'
OR `doctorLang`.`first_name` LIKE '%йло%'
OR `doctorLang`.`first_name` LIKE 'йло%'
OR `doctorLang`.`second_name` LIKE '%йло'
OR `doctorLang`.`second_name` LIKE '%йло%'
OR `doctorLang`.`second_name` LIKE 'йло%'
OR `doctorLang`.`third_name` LIKE '%йло'
OR `doctorLang`.`third_name` LIKE '%йло%'
這是您的WHERE
子句的版本,其行為應與預期的一樣:
WHERE
doctorLang.city = 'Пловдив' AND
doctorLang.language = 'bg' AND
doctor.active = 1 AND
(
doctorLang.first_name LIKE '%йло' OR
doctorLang.first_name LIKE '%йло%' OR
doctorLang.first_name LIKE 'йло%' OR
doctorLang.second_name LIKE '%йло' OR
doctorLang.second_name LIKE '%йло%' OR
doctorLang.second_name LIKE 'йло%' OR
doctorLang.third_name LIKE '%йло' OR
doctorLang.third_name LIKE '%йло%'
)
您原來的WHERE
子句(不帶括號)被解釋為:
WHERE
(
doctorLang.city = 'Пловдив' AND
doctorLang.language = 'bg' AND
doctor.active = 1 AND
doctorLang.first_name LIKE '%йло'
)
OR
doctorLang.first_name LIKE '%йло%' OR
doctorLang.first_name LIKE 'йло%' OR
...
換句話說,即使涉及名稱的OR
條件之一為真,也將導致所有行都被返回,顯然會忽略您的其他限制。
值得一提的是, AND
優先級或執行順序比OR
更高。 但是我們可以使用括號強加我們想要的任何評估順序。
它正在為一個或一個條件工作,實際上是像city ='something'或name ='something'
改用子查詢
首先獲取您要查找的城鎮,然后從結果中獲取您要查找的名稱
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.