【问题标题】:like and not like in one mysql query在一个 mysql 查询中喜欢和不喜欢
【发布时间】:2009-06-15 12:59:33
【问题描述】:

我想做一个包含“喜欢”和“不喜欢”的查询。

当前示例:我想要以 '1|%' 开头的所有内容,但不希望以 '1|6|199|%' 或 '1|6|200|%' 开头。

当前查询:

'SELECT * FROM `links` WHERE `category` LIKE '1|%' NOT LIKE '1|6|199|%','1|6|200|%' ORDER BY `score` DESC LIMIT 9'.

但这不起作用。有小费吗?谢谢

【问题讨论】:

  • “不起作用”应该更精确一些。我假设您遇到语法错误 - 在这种情况下,Michael Haren 有您的解决方案。

标签: mysql sql-like


【解决方案1】:

只需添加“和类别”...

SELECT * FROM links 
WHERE category LIKE '1|%' 
  AND category NOT LIKE '1|6|199|%','1|6|200|%' 
ORDER BY score DESC LIMIT 9

实际上,逗号分隔的条件不是我熟悉的语法。如果这不起作用,请尝试以下方法:

SELECT * FROM links 
WHERE category LIKE '1|%' 
  AND category NOT LIKE '1|6|199|%'
  AND category NOT LIKE '1|6|200|%' 
ORDER BY score DESC LIMIT 9

【讨论】:

  • 谢谢!有效!但是,以下有什么问题? SELECT * FROM links WHERE category LIKE '1|6|%' AND category NOT LIKE '1|6|137|%','1|6|151|%','1|6|118 |%','1|6|176|%','1|6|67|%','1|6|199|%','1|6|160|%' ORDER BY score DESC LIMIT 9 ?它显示为空,但不是 thx!
  • 如果你想执行多个排除,我建议你使用 SUBSTR(category, 1, 8) NOT IN ( 1|6|137|','1|6|151|', .. .).
【解决方案2】:

你可以使用regexps:

SELECT  *
FROM    links 
WHERE   category LIKE '1|%' 
        AND category NOT REGEXP '^1\\|6\\|(199|200)\\|'
ORDER BY
        score DESC
LIMIT 9

注意REGEXP 不使用索引,而LIKE 使用。

在此查询中,LIKE '1|%' 将用作粗过滤器,使用 category 上的索引(如果有),而 REGEXP 将精细过滤结果。

【讨论】:

    【解决方案3】:

    我认为更大的问题是您有非规范化的表。正确的答案是规范化您的表格。

    但如果你不能这样做,你应该使用逗号作为分隔符,而使用FIND_IN_SET()

    WHERE FIND_IN_SET('1', category) > 1
      AND FIND_IN_SET('6', category) > 1
      AND FIND_IN_SET('199', category) = 0
      AND FIND_IN_SET('200', category) = 0
    

    【讨论】:

      【解决方案4】:

      也可以使用两个内连接,可能不是这个查询的最佳解决方案,但仍然有用。

      从链接中选择 *

      INNER JOIN (SELECT * FROM links WHERE category NOT LIKE '1|6|199|%') AS escl1 ON (links.category=escl1.category)

      INNER JOIN (SELECT * FROM links WHERE category NOT LIKE '1|6|200|%') AS escl2 ON (links.category=escl2.category)

      WHERE 类别 LIKE '1|%'

      score DESC LIMIT 9 订购

      【讨论】:

        猜你喜欢
        • 2014-03-30
        • 1970-01-01
        • 2012-12-23
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        相关资源
        最近更新 更多