[英]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.