我想非常谦虚地询问,我的两个查询显示了不同的结果。在这两个查询中,我传递了两个错误的值(城市 ID 并说明它),但查询仍然显示在执行时返回一行。以下是显示行的查询,我希望它不应该
select * from `companies` where `city_id` = 3 and `state_id` = 4 and
`company_name` LIKE '%en%'
or `company_email` LIKE '%en%'
or `company_profile` LIKE '%en%'
order by `company_name` asc
下面的查询没有显示任何行,由于传递了错误的值,所以这是预期的结果
select * from `companies` where `city_id` = 3 and `state_id` = 4 and
`company_name` LIKE '%en%'
or `company_email` LIKE '%en%'
order by `company_name` asc
两个查询的唯一区别是 like 子句
or `company_email` LIKE '%en%'
有人可以指导我为什么会发生这种情况吗?我愿意欣赏。如果我犯了任何错误,我深表歉意。
最佳答案
您混合使用 and
和 or
的方式表明您并不完全了解它们的 precedence 。 AND
的优先级高于 OR
,因此您的查询相当于这些:
where (
`city_id` = 3
and `state_id` = 4
and `company_name` LIKE '%en%'
)
or `company_email` LIKE '%en%'
or `company_profile` LIKE '%en%'
where (
`city_id` = 3
and `state_id` = 4
and `company_name` LIKE '%en%'
)
or `company_email` LIKE '%en%'
我认为您唯一的匹配是由于 company_profile
。
关于php - 为什么查询显示结果,但大部分参数值都是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745596/