gpt4 book ai didi

sql - 搜索逻辑和算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:34 25 4
gpt4 key购买 nike

需要帮助解决这个问题。

我有两张 table

user
----
name
skills (comma separated value of skills;not mapped to next table)

存储用户名和他的技术技能的地方。

skills
-----
id
language_name

我们只存储技能而不映射到任何东西。

我有一个带有一个文本字段的搜索表单,您可以在其中输入主要技能:

eg. java javascript html css

根据输入的值,我想找到具有技术技能的最佳人选,并显示最接近所搜索技能的人。

知道我该如何实现这一目标。也欢迎对表格结构的更改提出建议。

注意最佳人是列表中技能数量最多的人。

最佳答案

您可以为技能使用普通的规范化标签表并使用 SQL,或者您可以将技能存储为单个列表并在单个列上使用 FREETEXT 搜索。

user       : id; name
skill : id; language_name
user_skill : user_id; skill_id

每遇到一个新的技能,就在技能中新建一个入口,这样“.Net”、“DotNet”、“C#.Net”就会出现3次。

在搜索“java javascript html css”的最佳匹配项时,将其分成 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

关于sql - 搜索逻辑和算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4790465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com