sql查询在不同的列中搜索多个单词

时间:2016-08-31 19:08:03

标签: sql performance indexing

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

喜欢iphone 3g mobile

很明显,我找到这两个单词的列数很少,而且会有很多记录会包含所有这些单词,有些会有1个单词。

我只想说要查找列,列名为Title Description

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

我担心的是:

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

我想要在标题或说明中包含所有这3个关键字的记录应该首先出现,然后是那些有2个关键字的记录,依此类推

2 个答案:

答案 0 :(得分:0)

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

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

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

CREATE FULLTEXT INDEX idx ON items(title,description)

答案 1 :(得分:0)

如果你不介意动态

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