首页 > 解决方案 > MySQL LIKE 语句返回奇数结果

问题描述

当我使用 AND 和 OR 对多列执行 LIKE MySQL 查询时,我的过滤器会导致查询(例如 by Price 0 AND 50000)停止工作。如果我从我的 LIKE 语句中删除 OR,则搜索工作正常。如何使用 LIKE 语句正确搜索多个列?

这是忽略 Price 的无工作语句的示例

SELECT * 
  FROM table 
 WHERE Price BETWEEN 0 AND 500000 
   AND class_id = 1 
   AND TotalSqFt BETWEEN 0 AND 999999999 
   AND Acres BETWEEN 0 AND 999999999 
   AND InclusionsFeatures LIKE '%horse%' 
    OR Remarks LIKE '%horse%' 
ORDER 
    BY Price DESC

此语句正常工作,但现在我只能对一列进行 LIKE 查询。

SELECT * FROM table WHERE Price BETWEEN 0 AND 500000 AND class_id = 1 AND TotalSqFt BETWEEN 0 AND 999999999 AND Acres BETWEEN 0 AND 999999999 AND InclusionsFeatures LIKE '%horse%' ORDER BY Price DESC

标签: phpmysqlsql-like

解决方案


在第一个语句中,当您在最后一个 AND 之后添加 OR 时,Mysql 会一直执行直到它运行 OR。如果 OR 条件通过,AND 之前的所有内容都将被忽略。所以查询不能正确运行。

看看这个查询:

SELECT
    * 
FROM
TABLE 
WHERE
    Price BETWEEN 0 
    AND 500000 
    AND class_id = 1 
    AND TotalSqFt BETWEEN 0 
    AND 999999999 
    AND Acres BETWEEN 0 
    AND 999999999 
    AND (InclusionsFeatures LIKE '%horse%' OR Remarks LIKE '%horse%' ) 
ORDER BY
    Price DESC

通过用括号对 LIKES 进行分组,它会检查括号内的条件与所有其他条件与 AND。因此查询返回匹配括号内的条件和所有其他条件的数据。


推荐阅读