我有购物车,显然有一些产品数据。用户可以搜索任何内容。
喜欢iphone 3g mobile
很明显,我找到这两个单词的列数很少,而且会有很多记录会包含所有这些单词,有些会有1个单词。我只想说要查找列,列名为Title
Description
我很容易将这些单词分解为title like '%iphone%' or title like '%mobile%' or....
我担心的是:
最好的方法是什么(高效)
我想要在标题或说明中包含所有这3个关键字的记录应该首先出现,然后是那些有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