MySQL LIKE 语句返回奇数结果

MySQL LIKE statement returning odd results

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

这是一个 none 工作语句的示例,其中价格被忽略

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

您混合了 ANDOR 运算符。所以你可以正确地附上条件将工作。对于您的 OR 条件,您可以附上如下内容:

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

在第一个语句中,当您在最后一个 AND 之后添加 OR 时,Mysql 会一直执行到 运行s 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

通过用括号将您的“喜欢”分组,它会检查括号内的条件与所有其他条件,并使用 AND。所以查询 return 匹配括号内条件和所有其他条件的数据。