我正在使用像这样的查询创建搜索功能
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
答案 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%'