2

我有一个包含用户 ID(candidate_id)和技能的表

在此处输入图像描述

例如,在单独的表(required_skills)上,我有一列技能用逗号(,)分隔Administrator,office

我正在尝试创建一个 SELECT 语句来查找候选人具有“required_skills”表中列出的所有技能的位置。

我尝试过使用数组,但对它们不够了解......

$myString = "$skills";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){

$result=mysql_query("SELECT * FROM candidate_skills WHERE skill LIKE '%$my_Array%'");

这显然没有给我我想要的东西,因为它为每一行创建了一个选择语句......

任何人都可以建议吗?

4

2 回答 2

2

将逗号分隔的列表放入数据库中几乎总是错误的处理方式。您应该为技能、候选人以及所需的任何技能提供单独的表格;还有两张表:一张将候选人与技能联系起来,另一张将所需技能与他们所需的技能联系起来。然后,您可以使用这些中间表来衡量候选人技能组合满足所需组合的程度。

这将为您提供至少具有一项所需技能的所有候选人的列表,按他们完成的技能数量从最好到最差排序:

SELECT vs.vacancy_id, cs.candidate_id
   , COUNT(DISTINCT vs.skill_id) AS requiredSkillCount
   , COUNT(DISITCT cs.skill_id) AS candidateSkillCount
FROM vacancy_skills AS vs
LEFT JOIN candidate_skills AS cs ON vs.skill_id = cs.skill_id
WHERE vs.vacancy_id = something
GROUP BY vs.vacancy_id, cs.candidate_id
ORDER BY candidateSkillCount DESC, cs.candidate_id ASC
;
  • 您可以使用HAVING candidateSkillCount = requiredSkillCount子句仅获取完全限定的子句(或 < 获取部分限定的子句),
  • 您可以加入candidates表格以获取候选人的姓名,
  • 您也可以加入skills表格以用于GROUP_CONCAT(skills.name ORDER BY skills) AS relevantSkillsList在结果中获取以逗号分隔的技能列表(如果您想要所需技能和所拥有技能的名称列表,则需要加入两次)
于 2019-02-22T17:21:30.980 回答
-1

在这里会有所帮助

  $skills='Administrator,office';
  $result=mysql_query("SELECT * FROM candidate_skills 
  WHERE skill IN ($skills)) ;
于 2019-02-22T17:41:51.750 回答