【问题标题】:sql query search multiple words in different columnssql查询在不同列中搜索多个单词
【发布时间】:2017-01-08 11:53:54
【问题描述】:

我的购物车显然有一些产品数据。用户可以搜索任何内容。

喜欢 iphone 3g 手机

显然,我几乎没有几列可以找到这两个词,而且会有很多记录包含所有这些词,有些记录会包含其中之一。

假设我有要查找的列,列名是 Title Description

我很容易将这些词分解并搜索为title like '%iphone%' or title like '%mobile%' or....

我的担忧是:

什么是最好的方法(高效)

我希望在标题或描述中包含所有这 3 个关键字的记录应该排在第一位,然后是包含其中 2 个关键字的记录,依此类推

【问题讨论】:

  • 使用 DBMS 的全文功能

标签: sql performance indexing


【解决方案1】:

如果您使用的是 MySQL,我建议您使用全文搜索选项。
来自official example

SELECT * FROM items
    WHERE MATCH (title,description)
    AGAINST ('mobile' IN NATURAL LANGUAGE MODE);

您还应该创建一个相关的全文索引:

CREATE FULLTEXT INDEX idx ON items(title,description)

【讨论】:

    【解决方案2】:

    如果你不介意动态

    Declare @SearchFor  varchar(max) ='Daily,Production,default'  -- any comma delim string
    Declare @SearchFrom varchar(150) ='OD'                        -- table or even a join statemtn
    Declare @SearchExpr varchar(150) ='[OD-Title]'                -- Any field or even expression
    Declare @ReturnCols varchar(150) ='[OD-Nr],[OD-Title]'        -- Any field(s) even with alias 
    
    Set @SearchFor = 'Sign(CharIndex('''+Replace(Replace(Replace(@SearchFor,' , ',','),', ',''),',',''','+@SearchExpr+'))+Sign(CharIndex(''')+''','+@SearchExpr+'))'
    Declare @SQL nvarchar(Max) = 'Select * from (Select Distinct'+@ReturnCols+',Hits='+@SearchFor+' From '+@SearchFrom + ') A Where Hits>0 Order by Hits Desc' 
    
    Exec(@SQL)
    

    返回

    OD-Nr   OD-Title                    Hits
    3       Daily Production Summary    2        <<< Notice 2 of 3 hits
    6       Default Settings            1
    

    【讨论】:

    • 在我的脑海中你是 SQL Server。
    • 动态 sql...我非常关心性能,因为我有 100,000 种产品要搜索...如果没有动态和最有效的方式,我们怎么办
    • 如何在多列中搜索?
    • @MuhammadAdnan 在 SearchExpr 中定义它们,即 FieldA+FieldB
    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多