2013-02-01 114 views
0

我有2個表,如下面表格:搜索與多個參數查詢

表1包含UserIDName而表2包含UserIDSkill_ID,並SkillName

我想要做的是,我想搜索具有2項技能的人,通過SkillName進行搜索。

例如:我有安迪Name,他有2技能PHPC#因此,當我搜索PHP & C#,安迪將顯示爲結果。

任何人都可以幫助我嗎?謝謝。

+1

1.規範化數據。你需要一個用戶表,一個技能表和一個表格(user_skills),它們相互關聯。 – Strawberry

+0

感謝您的建議,我會盡力去做 – Diom

回答

0
SELECT a.Name 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.userID = b.user_ID 
WHERE b.skill_name IN ('PHP','C#') 
GROUP BY a.Name 
HAVING COUNT(*) = 2 

您的表的設計沒有很好地標準化。關係類型爲Many-to-Many,在這種情況下,這應該是三個表,Users,Skills和鏈接表User_Skills

一個建議的設計將是:

User

  • 用戶ID(PK)
  • 名稱

Skills

  • SkillID (PK)
  • SkillName

User_Skills

  • 用戶ID(FK)
  • SkillID(FK)
+0

如果'(userID,SkillName)'不保證是唯一的,那麼您將需要'COUNT(DISTINCT SkillName)'而不是'COUNT(*)'。此外,可能值得一提的是,「Table2」中存在「Skill_ID」和「SkillName」是違反[2NF](http://en.wikipedia.org/wiki/Second_normal_form)。 – eggyal

+0

看起來不錯,我會稍後嘗試,如果我發現另一個問題,我會問這裏。謝謝你的幫助 – Diom