为什么这个查询返回所有匹配我的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
具有更高的优先级,或执行顺序。但是我们可以通过使用括号来强加任何我们想要的评估顺序。
关于mysql - 查询返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631426/