2013-02-20 63 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%'