Php 使用REGEXP在MySQL中搜索

Php 使用REGEXP在MySQL中搜索,php,mysql,regex,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_

我正在使用如下查询创建一个搜索函数

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'

当我认为它不会返回任何东西时,它返回相同的值,有人可以帮助吗?我还在学习MySQLD

我的表格结构:

技能集
PersonalID| SkillName
130105 | PL
130105 |谷歌

语言
PersonalID|语言
130105|意大利

130105 | Volapuk

如果不进行聚合,则无法在一个查询中比较同一表的两行。最好从MySQL中选择所有可能的有效行,并使用PHP循环数据,因为您将能够维护状态(例如,哪个人有什么技能),然后根据请求匹配最终结果

在MySQL中,您可以使用
GROUP\u 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%'

正则表达式中的
|
表示
。所以
'pl | google'
'pl | adafrtesd'
都将匹配
'pl'
。这是错的吗?你是在尝试匹配其他东西吗?你想做什么?@Xtrader你刚才写的有什么问题吗?你想具体做什么?