スキルに正規化されたタグテーブルを使用してSQLを使用することも、スキルを単一のリストとして格納して、単一の列でFREETEXT検索を使用することもできます。
user : id; name
skill : id; language_name
user_skill : user_id; skill_id
あなたは新しいスキルに遭遇するたびに、単にスキルでそれのための新しいエントリを作成し、その「.NET」、 『過去ログ』、 『C#.NETが』 3回表示されるでしょう。
4のリストにそれを破る、「ジャワのjavascriptのHTML、CSS、」ベストマッチを探し、そのクエリはオンこの
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彼はスキルに最も近いところに来る人を検索しましたか?私はあなたのデータベースで能力の判断を見ないので、もし2人ともにJavaを持っていれば、両方のカテゴリーで最初に結びついています。 – Michael