0

私は2つのテーブルを持っています

profile_tablejobs_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#

では、ジョンのスキルとジョブを一致させるにはどうすればよいですか。

ジョンスキルを文字列全体として取得してmysqlで検索しようとしましたが、その結果全体が文字列であるため、すべてのスキルではなくLIKE検索するだけですskillrequired_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 つの 2 列のテーブルを作成します。1 つは結合profilesするテーブルskill、もう1 つjobsは同じテーブルに結合するskillテーブルです。

profile_skill

pid | sid             

1   | 4
1   | 6
1   | 9
2   | 1  
2   | 2
3   | 7  
3   | 8

job_skill

jid | sid             

11   | 1
11   | 2
11   | 3
11   | 5  
etc...

`

これで、いずれかの方法で一致を抽出するためのクエリを作成できるようにprofilesなりました。jobsskills

于 2012-09-02T13:01:19.350 に答える