2012-06-26 39 views
-1

我已經在SQL中創建了一個關鍵字搜索,它根據產品數據庫中的各個列獲取關鍵字列表並進行檢查。因此,您可以搜索標題,說明等。SQL關鍵字搜索將返回任何結果

我希望它返回所有結果,並在沒有任何返回的情況下跳過結果。

它適用於所有關鍵字都匹配的情況,但當一個或多個關鍵字沒有返回結果時它不起作用。我認爲需要檢查零結果或更好的方法將臨時表與產品表進行匹配。

在下面的例子中,如果我搜索「braun,washer」,我會得到兩個結果。

ProductId  ProductName 
23    Large Braun Washer 
45    Small Washer by Braun 

但是,我沒有得到任何結果,如果我搜索「布勞恩,洗衣機,」因爲沒有任何產品含有單詞「清洗」。我仍然希望得到前兩個命中的兩個結果。

--temp table for keyword values 
create table #delimitedKeywords 
(
    [keywordID] int identity(1,1), 
    keywords varchar(100) 
) 
declare @keywordValues varchar(50); 
declare @arrayLength int; 
declare @position int; 
declare @nextDelim int; 
declare @prevDelim int; 
declare @delimValue varchar(10); 
set @keywordValues = 'braun,washer,washing,'; 
set @arrayLength = LEN(@keywordValues); 
set @position = 1; 
set @nextDelim = 0; 
set @prevDelim = 0; 

--loop through position 
while @position <= @arrayLength 
    begin 
     --substring comma delimeter 
     set @nextDelim = CHARINDEX(',', @keywordValues, @position); 
     set @delimValue = (SUBSTRING(@keywordValues, @position, @nextDelim - @prevDelim -1)); 

     --stop loop if at end 
     if LEN(@delimValue) > 0 
     BEGIN 
      insert into #delimitedKeywords 
       (keywords) 
      values 
       (@delimValue); 
     END 
     set @prevDelim = @nextDelim; 
     set @position= @nextDelim+1; 
    end 

begin 

--select the keywords from the temp table to search on 
declare @Keyword varchar(100) 

select @Keyword = [keywords] from #delimitedKeywords 

--search product table 
SELECT [ProductId] 
     ,[ProductName] 
     ,[ProductDescription] 
     ,[ProductBrief] 
     ,[ProductSpecification] 

    FROM [Product] 

    WHERE 
    [ProductName] like '%' + @Keyword + '%' 
    OR [ProductDescription] like '%' + @Keyword + '%' 
    OR [ProductSpecification] like '%' + @Keyword + '%' 
    OR [ProductBrief] like '%' + @Keyword + '%' 

--drop temp 
drop table #delimitedKeywords; 
end 

客戶端將單個SQL參數傳遞給MS SQL中的存儲過程。然後,SQL將參數拆分爲逗號分隔符,然後創建一個臨時表進行搜索。

最終我計劃對結果進行加權,以使標題的結果比其他地方更多。

+0

我不能使用全文索引或第三方搜索插件。 – User970008

+0

您正在從#delimitedKeywords中選擇@Keyword = [keywords]返回一個關鍵字 - 這是'清洗'。 – user1166147

回答

0

這是不是會返回一個值:

select @Keyword = [keywords] from #delimitedKeywords 

...也許是這樣的:

SELECT DISTINCT [ProductId] 
    ,[ProductName] 
    ,[ProductDescription] 
    ,[ProductBrief] 
    ,[ProductSpecification] 
FROM [Product] 
INNER JOIN #delimitedKeywords 
ON [ProductName] like '%' + Keywords + '%' 
OR [ProductDescription] like '%' + Keywords + '%' 
OR [ProductSpecification] like '%' + Keywords + '%' 
OR [ProductBrief] like '%' + Keywords + '%' 
+0

謝謝,這個伎倆。 – User970008

相關問題