有个classinfo表
表内有
classname,
classid,
classkeyword1,
classkeyword2,
classkeyword3,
classkeyword4,
classkeyword5,现在要的实现结果是这样的,输入一个字符,然后去查,和五个classkeyword中有多少是完全匹配的,匹配的越多,排在越前面,这样排十个.比如有这样的一个记录
classname='水果刀'
classid=11
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='刀'
classkeyword4='餐具'
classkeyword5='厨房用具'classname='杀猪刀'
classid=12
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='餐具'
classkeyword4='玩具'
classkeyword5='武器'如果输入一个刀,那么
水果刀就排在杀猪刀之前,最好还能得到一个列名,就是有几个匹配,水果刀是3,杀猪刀2谢谢,头痛死了
表内有
classname,
classid,
classkeyword1,
classkeyword2,
classkeyword3,
classkeyword4,
classkeyword5,现在要的实现结果是这样的,输入一个字符,然后去查,和五个classkeyword中有多少是完全匹配的,匹配的越多,排在越前面,这样排十个.比如有这样的一个记录
classname='水果刀'
classid=11
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='刀'
classkeyword4='餐具'
classkeyword5='厨房用具'classname='杀猪刀'
classid=12
classkeyword1='刀'
classkeyword2='刀'
classkeyword3='餐具'
classkeyword4='玩具'
classkeyword5='武器'如果输入一个刀,那么
水果刀就排在杀猪刀之前,最好还能得到一个列名,就是有几个匹配,水果刀是3,杀猪刀2谢谢,头痛死了
declare @d table(classname varchar(50),id int,classkeyword1 varchar(10),classkeyword2 varchar(10),classkeyword3 varchar(10),classkeyword4 varchar(10),classkeyword5 varchar(10))
insert into @d select '水果刀',11,'刀','刀','刀','餐具','厨房用具'
insert into @d select '杀猪刀',12,'刀','刀','餐具','玩具','武器'
--解决方法
select classname,id,classkeyword1,classkeyword2,classkeyword3,classkeyword4,classkeyword5,c1+c2+c3+c4+c5 from (
select *,
c1=case when len(classkeyword1)-len(replace(classkeyword1,'刀',''))>0 then 1 else 0 end ,
c2=case when len(classkeyword2)-len(replace(classkeyword2,'刀',''))>0 then 1 else 0 end ,
c3=case when len(classkeyword3)-len(replace(classkeyword3,'刀',''))>0 then 1 else 0 end,
c4=case when len(classkeyword4)-len(replace(classkeyword4,'刀',''))>0 then 1 else 0 end,
c5=case when len(classkeyword5)-len(replace(classkeyword5,'刀',''))>0 then 1 else 0 end
from @d
where charindex('刀',classkeyword1+classkeyword2+classkeyword3+classkeyword4+classkeyword5)>0
)a
order by 8 desc
insert into @d select '水果刀',11,'刀','刀','刀','餐具','厨房用具'
insert into @d select '杀猪刀',12,'刀','刀','餐具','玩具','武器'select classname,id,classkeyword1,classkeyword2,classkeyword3,classkeyword4,classkeyword5,c1+c2+c3+c4+c5 from (
select *,
c1=case when len(classkeyword1)-len(replace(classkeyword1,'刀',''))>0 then 1 else 0 end ,
c2=case when len(classkeyword2)-len(replace(classkeyword2,'刀',''))>0 then 1 else 0 end ,
c3=case when len(classkeyword3)-len(replace(classkeyword3,'刀',''))>0 then 1 else 0 end,
c4=case when len(classkeyword4)-len(replace(classkeyword4,'刀',''))>0 then 1 else 0 end,
c5=case when len(classkeyword5)-len(replace(classkeyword5,'刀',''))>0 then 1 else 0 end
from @d
where charindex('刀',classkeyword1)>0
or charindex('刀',classkeyword2)>0
or charindex('刀',classkeyword3)>0
or charindex('刀',classkeyword4)>0
or charindex('刀',classkeyword5)>0)a
order by 8 desc