제품 데이터베이스의 다양한 열에 대해 키워드 목록과 검사 목록을 사용하는 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은 매개 변수를 쉼표 분리 문자로 분리 한 후 검색 할 임시 테이블을 작성합니다.
결국 결과의 중요도가 높아 지므로 제목의 결과가 다른 곳보다 많습니다.
나는 전체 텍스트 색인 또는 제 3 자의 검색 플러그인을 사용할 수 없습니다. – User970008
#delimitedKeywords에서 select @Keyword = [keywords]가있는 단일 키워드를 반환합니다 - 'washing'입니다. – user1166147