2013-02-20 26 views
0

在MySQL中搜索我創建使用這樣的查詢使用REGEXP

SELECT personal_info.PersonalID, personal_info.FullName FROM personal_info 

INNER JOIN skillset ON personal_info.PersonalID = skillset.PersonalID 
INNER JOIN language ON personal_info.PersonalID = language.PersonalID 

WHERE personal_info.FullName LIKE '%%' 
AND skillset.SkillName REGEXP 'pl|google' 
AND language.Language REGEXP 'ita|vol' 

HAVING COUNT(*) 

該查詢返回的結果如我所料的搜索功能,但是,當我通過改變而改變它,以確保

再次skillset.Skillname REGEXP 'pl|google'分成skillset.Skillname REGEXP 'pl|adafrtesd'

它返回相同的值,當我認爲它不會返回任何東西,任何人都可以幫忙嗎?我仍然在學習MySQL。 :d

我的表結構:

技能
PersonalID |技能名稱
130105 | PL
130105 | Google

語言
PersonalID |語言
130105 |意大利
130105 | Volapuk

+1

做的'|'在正則表達式意味着'或'。因此''pl'|'和''| adafrtesd''都會匹配''pl'。 – 2013-02-20 22:16:47

+0

這是錯的嗎?你是否想要匹配其他東西? – 2013-02-21 00:27:19

+0

你想做什麼? – 2013-02-21 01:04:06

回答

1

您無法比較一個查詢中同一個表的兩行,而無需彙總。從MySQL中選擇所有有效的可能行並使用PHP循環訪問數據將是一個更好的主意,因爲您將能夠維護狀態(例如哪個人擁有什麼技能),然後根據請求匹配最終結果。

在MySQL中,你可能有GROUP_CONCAT

SELECT personal_info.PersonalID, personal_info.FullName, 
    GROUP_CONCAT(Language ORDER BY Language) AS languages, 
    GROUP_CONCAT(SkillName ORDER BY SkillName) AS skills 
FROM personal_info 
JOIN skillset ON personal_info.PersonalID = skillset.PersonalID 
JOIN language ON personal_info.PersonalID = language.PersonalID 
AND skillset.SkillName REGEXP 'pl|google' 
AND language.Language REGEXP 'ita|vol' 
GROUP BY PersonalID 
HAVING 
    skills LIKE '%pl%' AND skills LIKE '%google%'