0

我有两张桌子

profile_tablejobs_table

profile_table

---
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 技能与工作 required_skill 相匹配

我曾尝试将 john 技能作为整个字符串并LIKE在 mysql 中搜索,但整个结果是一个字符串,所以它只是搜索skill并非所有技能required_skill

而我想要实现包含任何skillin required_skill.

我曾尝试使用explode和分离代码并将其存储在一个数组中,但我只想在服务器端的数据库中执行以降低速度。

4

1 回答 1

1

一种更简洁的方法是规范化您的数据库,这样您就不会在required_skill列中存储超过一条信息。

从现有表中删除skill和列。required_skill

添加一个skill_table(我正在使用您的命名约定;我只是称之为Skill):

sid | SkillName             

1   | java
2   | struts
3   | J2EE
4   | .net 
5   | hibernate
6   | SSRS
7   | php
8   | apache
9   | report
etc...

然后再创建两个 2 列表 - 一个连接profiles到同一个表skill,另一个连接jobs到同一个skill表:

profile_skill

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...

`

现在您可以编写一个查询来提取匹配项 - 加入profilesviajobsskills反之亦然。

于 2012-09-02T13:01:19.350 回答