Mysql sql查询包含或类似于作业和用户配置文件技能的单个单词
我有两张桌子Mysql sql查询包含或类似于作业和用户配置文件技能的单个单词,mysql,sql,Mysql,Sql,我有两张桌子 profile\u表和jobs\u表 profile_表 --- pid | name | skill 1 | john | .net, ssrs, report 2 | kyle | java, struts 3 | milo | php, apache --- jid | title | required_skill 11 | java developer | java, struts, j2ee, hibernate 1
profile\u表
和jobs\u表
profile_表
---
pid | name | skill
1 | john | .net, ssrs, report
2 | kyle | java, struts
3 | milo | php, apache
---
jid | title | required_skill
11 | java developer | java, struts, j2ee, hibernate
12 | web developer | php, mysql, linux,
13 | .net developer | .net, wpf
14 | .net lead | .net, visual studio, C#
工作表
---
pid | name | skill
1 | john | .net, ssrs, report
2 | kyle | java, struts
3 | milo | php, apache
---
jid | title | required_skill
11 | java developer | java, struts, j2ee, hibernate
12 | web developer | php, mysql, linux,
13 | .net developer | .net, wpf
14 | .net lead | .net, visual studio, C#
现在,我如何将john skill与所需技能的工作相匹配
我曾尝试将john skill作为整个字符串,并在mysql中使用类似的进行搜索,但整个结果是一个字符串,因此它只搜索skill
而不是required\u skill
我想实现所需技能中包含的任何技能
我尝试过使用分解并将代码分离并存储在一个数组中,但我只想在服务器端的数据库中这样做以降低速度。一种更简洁的方法是将数据库标准化,这样您就不会在所需技能列中存储多条信息
从现有表中删除skill
和required\u skill
列
添加一个skill\u表
(我正在使用您的命名约定;我将其称为skill
):
然后再创建两个两列表-一个将配置文件
加入技能
,另一个将作业
加入同一技能
表:
profile\u技能
pid | sid
1 | 4
1 | 6
1 | 9
2 | 1
2 | 2
3 | 7
3 | 8
jid | sid
11 | 1
11 | 2
11 | 3
11 | 5
etc...
工作技能
pid | sid
1 | 4
1 | 6
1 | 9
2 | 1
2 | 2
3 | 7
3 | 8
jid | sid
11 | 1
11 | 2
11 | 3
11 | 5
etc...
`
现在,您可以编写一个查询来提取匹配项,通过skills
将profiles
连接到jobs
,反之亦然。我将重构数据库模型,并在多行中拥有技能和所需技能,而不是一行中的多个值一旦重构数据库,查找具有任何技能的候选对象是一种直接的连接。要找到具备所有必要技能的候选人,谷歌关系部门。你有两个选择:使用文本搜索或以适当的关系格式存储数据。SQL通常没有任何函数允许您将一个字符串的一部分与另一个字符串的一部分进行比较。您应该重构数据库模型。否则,您必须编写复杂的过程来完成此操作。谢谢,我将使用内部联接