gpt4 book ai didi

mysql - 搜索包含多个值的字段

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:32 24 4
gpt4 key购买 nike

假设我的表中需要一个名为skills的字段。它应该存储一个人的各种技能,例如phpjavaGolang

将此类数据存储在数据库中的合适方法是什么,以便更容易按技能进行搜索

编辑 1

技能用户可以随意输入,以上只是举例

用户可以在文本框中输入一项或多项技能,以逗号分隔

例子

skill1,skill2,skill3 

最佳答案

您可能应该重新考虑您的设计方法并将这些技能存储在名为 skills 的相关表中,其中包含 skill_idskill_name 列skill_desc 等...然后使用交叉引用表链接人员表中的 person_idskills< 中的 skill_id/ 表。

如果您无法执行重新设计,您可以使用带有一系列 LIKE 调用的查询:

SELECT *
FROM people
WHERE skills LIKE '%php%'
OR skills LIKE '%java%'
OR skills LIKE '%Golang%';

但那是相当草率的。我会去重新设计。使用 LIKE 会抵消索引的任何好处。

要扩展上面的多个表,当用户输入逗号分隔的技能列表时,您需要将其解析为集合/数组,检查它们是否存在于新的技能中 table 。如果它不存在,则将其插入。然后,或者如果它确实存在,您拉取 skill_id 并将其插入到带有 person_idperson_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;

这将使您获得 @personIDperson_id 人员的所有技能。

或者您可以使用以下查询选择 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

关于mysql - 搜索包含多个值的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41128315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com