使用REGEXP在MySQL中搜索

时间:2013-02-20 22:07:09

标签: php mysql regex

我正在使用像这样的查询创建搜索功能

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 | SkillName
130105 | PL
130105 |谷歌

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

1 个答案:

答案 0 :(得分: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%'