您可能应该重新考虑您的设计方法并将这些技能存储在一个名为skills 的相关表中,其中包含skill_id 和skill_name 和skill_desc 等列...然后使用交叉引用表链接@ 987654325@ 来自您的人员表,skill_id 来自skills 表。
如果您无法执行重新设计,您可以使用带有一系列LIKE 调用的查询:
SELECT *
FROM people
WHERE skills LIKE '%php%'
OR skills LIKE '%java%'
OR skills LIKE '%Golang%';
但那是相当草率的。我会重新设计。使用LIKE 将否定索引的任何好处。
要扩展上面的多个表,当用户键入逗号分隔的技能列表时,您需要将其解析为集合/数组,检查它们是否存在于新的 skills 表中。如果它不存在,则插入它。然后,或者如果它确实存在,则拉取skill_id 并将其插入到带有person_id 的person_skills_xref 表中(如果该组合尚不存在)。
这样您就可以执行如下选择语句:
SELECT s.skill_id, s.skill_name, s.skill_desc
FROM skills s
JOIN people_skills_xref ps
ON s.skill_id = ps.skill_id
WHERE ps.person_id = @personID;
这将为您提供 person_id 或 @personID 的人的所有技能。
或者您可以使用以下查询选择people 表中具有特定skill_id 的所有人:
SELECT p.person_id, p.person_name, p.person_email
FROM people p
JOIN people_skills_xref ps
ON ps.person_id = p.person_id
WHERE ps.skill_id = @skillId;
或skill_name 使用LIKE:
SELECT p.person_id, p.person_name, p.person_email
FROM people p
JOIN people_skills_xref ps
ON ps.person_id = p.person_id
JOIN skills s
ON s.skill_id = ps.skill_id
WHERE s.skill_name LIKE @skillName;
其中@skillName 将包含'%sql' 的搜索字符串以匹配以sql 结尾的任何内容,例如mysql、pl/sql 或只是sql。