您既可以为技能使用普通的标准化标记表并使用SQL,也可以将技能作为单个列表存储并在单列上使用FREETEXT搜索。
user : id; name
skill : id; language_name
user_skill : user_id; skill_id
你遇到一个新的技能每一次,刚刚创建的技能为它的新条目,所以“净”,‘DOTNET的’,‘C#.net’将出现3次。
当搜索为“爪哇JavaScript的HTML教程”,打破成清单4的最佳匹配,所以查询看起来像这样
select top 10 u.name, count(*) matched
from skill s
inner join user_skill us on s.skill_id = us.skill_id
inner join user u on u.user_id = us.user_id
where s.language_name in ('java','javascript','html','css')
group by u.name
order by matched desc
(显示前10个)
在SQL Server 2005在FOR XML的帮助下,还可以获得最佳10个匹配用户中每一个的缺失技能列表
select top(10)
u.id,
u.name,
count(*) matched,
stuff(
(
select ',' + s.language_name
from skill s
where s.language_name in ('java','javascript','html','css')
and not exists (
select * from user_skill u2
where u2.user_id=u.id
and u2.skill_id=s.skill_id)
for xml path('')
),1,1,'') as missing_list
from skill s
inner join user_skill us on s.skill_id = us.skill_id
inner join [user] u on u.user_id = us.user_id
where s.language_name in ('java','javascript','html','css')
group by u.id, u.name
order by matched desc
最佳人员与技术技能和t他最接近技能搜索的人吗?我没有看到你的数据库中有任何能力的判断,所以如果两个人都拥有Java,那么他们在两个类别中都会被并列第一。 – Michael 2011-01-25 06:05:26