【问题标题】:LIKE and filtering of records with MySQL does no change使用 MySQL 的 LIKE 和过滤记录没有改变
【发布时间】:2011-09-14 22:00:09
【问题描述】:

我有我的 SQL,但是 WHERE 子句是我遇到的问题,因为使用运算符过滤掉记录似乎并没有过滤记录,而是在不应该的时候提取记录,我需要这个 LIKE/REGEXP 来提取记录,然后通过将 true 的记录包含到 = 语句中来缩小范围。

WHERE  rec.street_name REGEXP '[[:<:]]united[[:>:]]'
OR rec.city REGEXP '[[:<:]]united[[:>:]]'
OR rec.state REGEXP '[[:<:]]united[[:>:]]'
OR rec.country REGEXP '[[:<:]]united[[:>:]]'
OR rec.street_name LIKE 'united'
OR rec.city LIKE 'united'
OR rec.state LIKE 'united'
OR rec.country LIKE 'united'  
AND rec.ad_type = 1  
AND ( rec.num_rooms >= 15 AND rec.num_rooms IS NOT NULL )  
AND rec.visible_listing = 1

这个 WHERE 子句也不会过滤掉记录:

WHERE  rec.street_name REGEXP '[[:<:]]united[[:>:]]'
OR rec.city REGEXP '[[:<:]]united[[:>:]]'
OR rec.state REGEXP '[[:<:]]united[[:>:]]'
OR rec.country REGEXP '[[:<:]]united[[:>:]]'
OR rec.street_name LIKE 'united'
OR rec.city LIKE 'united'
OR rec.state LIKE 'united'
OR rec.country LIKE 'united' 
AND ( rec.ad_type = 1  AND ( rec.num_rooms >= 15 AND rec.num_rooms IS NOT NULL)  AND rec.visible_listing = 1 ) 

即使将rec.num_rooms / rec.ad_type 更改为任何数字仍然不会改变任何内容。这是为什么呢?

【问题讨论】:

    标签: mysql filtering where-clause


    【解决方案1】:

    在 OR 周围添加括号

    WHERE  (rec.street_name REGEXP '[[:<:]]united[[:>:]]'
    OR rec.city REGEXP '[[:<:]]united[[:>:]]'
    OR rec.state REGEXP '[[:<:]]united[[:>:]]'
    OR rec.country REGEXP '[[:<:]]united[[:>:]]'
    OR rec.street_name LIKE 'united'
    OR rec.city LIKE 'united'
    OR rec.state LIKE 'united'
    OR rec.country LIKE 'united' )
    
    AND rec.ad_type = 1  
    AND rec.num_rooms >= 15 
    AND rec.num_rooms IS NOT NULL 
    AND rec.visible_listing = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2017-08-17
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多