0

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

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 | 谷歌

语言
PersonalID | 语言
130105 | 意大利
130105 | 沃拉普克

4

1 回答 1

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%'
于 2013-02-21T14:35:19.940 回答