我在 SQL 中创建了一个关键字搜索,它获取关键字列表并检查产品数据库中的各个列。因此,您可以搜索标题、描述等。
我希望它返回所有结果并跳过没有返回任何结果的结果。
它在所有关键字都匹配时有效,但在一个或多个关键字没有返回结果时无效。我认为需要检查零结果或更好的方法来匹配临时表和产品表。
在下面的示例中,如果我搜索“braun,washer”,我会得到两个结果。
ProductId ProductName
23 Large Braun Washer
45 Small Washer by Braun
但是,如果我搜索“braun,washer,washing”,我没有得到任何结果,因为没有任何产品包含“washing”这个词。我仍然想获得前两个命中的两个结果。
--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 然后在逗号分隔符上拆分参数,然后创建一个临时表进行搜索。
最终我计划对结果进行加权,以便标题的结果比其他地方的结果更多。