【问题标题】:SQL multiple words search, ordered by number of matchesSQL 多词搜索,按匹配数排序
【发布时间】:2011-05-23 13:41:05
【问题描述】:

我正在尝试编写一个包含多个搜索词的 SQL SELECT 查询。但我希望结果按匹配的单词数排序。

例如,让搜索字符串为“red green blue”。我想要包含所有这三个单词的结果,然后是包含其中两个单词的结果,最后 - 只有一个单词匹配。

SELECT
    *
FROM
    table
WHERE
    (col LIKE '%red%') OR
    (col LIKE '%green%') OR
    (col LIKE '%blue%')
ORDER BY
    ?????

提前致谢!

【问题讨论】:

    标签: sql search-multiple-words


    【解决方案1】:

    您使用的是什么平台?如果是 SQL Server,那么听起来全文搜索架构将是您的最佳选择。

    http://msdn.microsoft.com/en-us/library/ms142583.aspx

    【讨论】:

      【解决方案2】:
      ORDER BY
      (
      CASE 
      WHEN  col LIKE '%red%' THEN 1
      ELSE 0
      END CASE
      +     
      CASE 
      WHEN  col LIKE '%green%' THEN 1
      ELSE 0 
      END CASE
      +    
      CASE 
      WHEN  col LIKE '%blue%' THEN 1
      ELSE 0
      END CASE
      )  DESC
      

      如果您的数据库供应商有IF,您可以使用它来代替CASE(例如,对于 Mysql,您可以编写 IF (col LIKE '%red% , 1,0) + IF(....'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        相关资源
        最近更新 更多