【问题标题】:mySQL - Find Context of a big List of Keywords in one fieldmySQL - 在一个字段中查找大量关键字的上下文
【发布时间】:2018-09-16 16:08:16
【问题描述】:

我对这个很失望。

我的 Maria MySql 数据库中有一个字段,其中包含如下数据:

Dummydata Dummydata

Dummydata Dummydata 15

Dummydata 124578 KEYWORD

在最后一行也可以是这样的:

Dummydata 124578KEYWORD

Dummydata 124578-KEYWORD

现在我有一个大约 3000 个关键字的列表,需要在我的结果中排除,这基本上是我唯一的标准。

我试过这样

AND NOT (FIELD LIKE '%KEYWORD1%' OR FIELD  LIKE '%KEYWORD2%')

在这里它只是重新调整所有内容,就像它被忽略了一样

AND NOT (FIELD IN ('%KEYWORD1%','%KEYWORD2%')')

这里看起来只是在第一段中搜索

好像不行:(

你能帮忙吗?

【问题讨论】:

    标签: mysql regex mariadb sql-like keyword


    【解决方案1】:

    对于少数几个关键字,您可以使用NOT REGEXP / NOT RLIKE

    AND FIELD NOT RLIKE '[0-9]+[ -]?(keyword1|keyword2|keyword3)'
    

    您还可以使用关键字创建表格。然后使用NOT EXISTSRLIKE

    AND NOT EXISTS
    (
       SELECT 1
       FROM wordstoavoid w
       WHERE t.FIELD RLIKE CONCAT('[0-9]+[ -]?', w.word)
    );
    

    可以找到测试here

    【讨论】:

    • 您好,谢谢您的帮助。不幸的是,前两个不起作用。我明天试试最后一个
    • 我试过了,但它似乎不起作用,它返回一个排除关键字的结果,但也排除了更多,所以我得到了 150 行,但它应该是 1000跨度>
    • @Intercept0r 这次使用的正则表达式将检查关键字之前的数字和可选空格/破折号。这可能会产生不同的结果。
    • 使用表格的方法效果很好!非常感谢!
    • 对于 MariaDB 10.2,请参阅 \b。对于 MySQL,请参阅 [[:<:]][[:>:]]。这些定义了单词边界。
    猜你喜欢
    • 2019-08-26
    • 2013-01-13
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多