mysql - 查询返回所有行

标签 mysql

为什么这个查询返回所有匹配我的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 条件之一为真,也会导致返回所有行,显然忽略了您的其他限制。

这里的教训是 ANDOR 具有更高的优先级,或执行顺序。但是我们可以通过使用括号来强加任何我们想要的评估顺序。

关于mysql - 查询返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631426/

相关文章:

php - UNIX 日期操作

php - MySQL多排序/多组查询

java - 使用 FQDN 识别的用户(而不是 IP)远程连接到数据库

php - INSERT : inserting multiple rows at once, 还是一一插入?

mysql - 如何进行 'groups' 许多 where 语句的选择查询

mysql - 使用 MySQL 通过 ODBC 包装另一个 DBMS

php - 如何使用继承来传递查询?

php - 从 MySQL 表中选择,按匹配的类别数排序

php - 如何在 PHP 中使用多行返回 JSON 进行内部连接

mysql - Joomla 的 utf8 问题