【问题标题】:Order of LIKE clause in query when wanting to use multiple terms想要使用多个术语时查询中 LIKE 子句的顺序
【发布时间】:2011-12-16 03:47:34
【问题描述】:

我有问题

SELECT * FROM images WHERE tags LIKE '%example%hello%'

我希望数据库以任意顺序选择“tags”列中具有“example”和“hello”的行,如下所示:

一行包含“你好,测试,示例”,还有“示例,你好,测试”或此顺序的任何其他变体。 即使不使用 LIKE,这是否可能?行必须全部包含用 LIKE 指定的所有内容。

编辑:例如,当我在查询中提供 'example' 和 'hello' 时,返回的行必须同时包含 'example' 'hello'。

【问题讨论】:

    标签: php mysql select sql-like


    【解决方案1】:

    你可以使用FIND_IN_SET:

    SELECT tags FROM images WHERE FIND_IN_SET('hello', tags) AND FIND_IN_SET('example', tags)
    

    但是,这要求标签在逗号后不能有空格(在这种情况下,您必须对 tags 或更多布尔检查进行替换)。这可能比LIKE 更快。我不确定。

    【讨论】:

      【解决方案2】:

      您可以尝试一个简单的OR 快速解决方案:

      SELECT * FROM images WHERE tags LIKE '%example%' OR tags LIKE '%hello%'
      

      编辑

      要解决您的编辑问题,您可以改用AND

      SELECT * FROM images WHERE tags LIKE '%example%' AND tags LIKE '%hello%'
      

      【讨论】:

      • 抱歉,在您发布时对我的问题进行了编辑。我需要返回的所有行都包含“示例”和“你好”
      • @user1015599,在推广这种技术时要小心,因为如果你的两个词是'example'和'exam',它可能不会像你期望的那样工作,甚至可能有麻烦如果这两个词是“示例”和“大量”。
      猜你喜欢
      • 2020-04-18
      • 2019-12-16
      • 2015-10-29
      • 2018-08-25
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2014-09-01
      相关资源
      最近更新 更多