2016-08-31 8 views
-1

私は明らかにいくつかの製品データを持っているショッピングカートを持っています。ユーザーは何でも検索できます。明らかに、モバイルSQLクエリは複数の単語を異なる列で検索します

iphone 3gのような

は、私はこれら二つの単語を見つけるために、いくつかの列を持っており、これらの言葉のすべてを持っているでしょうし、いくつかは、それらの1のいずれかを持っているでしょうので、多くのレコードが存在することになります。

私は見つけることの列を持っているだけと言う、列名がTitleDescription

私はこれらの言葉を打破し、title like '%iphone%' or title like '%mobile%' or....

私の懸念があるとして検索するために、その非常に簡単ですができます:

は何ですか

タイトルまたは説明にこれらの3つのキーワードがすべて含まれているレコードが最初に来て、次に2つのそれらのように

+1

どのデータベースですか? –

+2

DBMSのフルテキスト機能を使用する –

答えて

0

MySQLを使用している場合は、フルテキスト検索オプションをお勧めします。

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

ます。また、関連するフルテキストインデックスを作成する必要があります:official exampleから

CREATE FULLTEXT INDEX idx ON items(title,description) 
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,' , ',','),', ',''),',',''','[email protected]+'))+Sign(CharIndex(''')+''','[email protected]+'))' 
Declare @SQL nvarchar(Max) = 'Select * from (Select Distinct'[email protected]+',Hits='[email protected]+' From '[email protected] + ') 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 
+0

私の頭の中にSQL Serverがあればいいですか? –

+0

ダイナミックSQL ...私は検索する製品が100,000種類あるため、パフォーマンスについて非常に懸念しています...どのように動的で最も効率的な方法なしに行うことができます –

+0

どのように複数の列で検索しますか? –

関連する問題