【问题标题】:PHP MYSQL Select where multiple variables [duplicate]PHP MYSQL选择多个变量的位置[重复]
【发布时间】:2025-12-16 09:10:01
【问题描述】:

我有一个包含用户 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%'");

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

谁能给点建议?

【问题讨论】:

  • 警告:不要使用在 PHP 7 中删除的过时的mysql_query 接口。PDO is not hard to learn 之类的替代品和PHP The Right Way 之类的指南有助于解释最佳实践.这里的参数是 NOT properly escaped 并且在这段代码中有严重的 SQL injection bugs。转义任何和所有用户数据,尤其是来自$_POST$_GET
  • @PatrickQ - 如果我有 2 个逗号分隔值,您能否提供示例选择语句?因为这 2 个值的顺序可能不同且不相同。
  • @PatrickQ 只有在候选人没有无关技能的情况下才有效。如果需要“a,c”,并且候选人有“a,b,c”,则该候选人将被排除在外。
  • @PatrickQ - 因此这行不通。一个字段可以是office,administrator,另一个字段可以是administrator,office
  • 完全正确@Uueerdo!

标签: php mysql select


【解决方案1】:

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

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

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 在结果中获得以逗号分隔的技能列表(如果您想要技能的名称列表,则需要加入两次所需的技能和所拥有的技能)

【讨论】:

  • 查询将取决于您要查找的内容。您是否试图查找特定候选人是否具有技能或......无论需要什么技能,所有具有所有必需技能的候选人,特定候选人满足所有要求的所有“事物”等等。 ..?
  • 理想情况下,我希望运行一个 SELECT 查询来查找具有所有技能的候选人,并运行一个单独的 SELECT 查询来查找具有某些技能的候选人......
  • 好的,我添加了一个通用查询,可以帮助您入门。
  • 这正是我想要的。因此,我创建了另一个名为vacancy_skills 的表,其中包含skillvacancy_id 列。我需要以某种方式理解您的选择语句才能使用它.....
  • 你能用他的新表格编辑你的代码@Uueerdo吗?
【解决方案2】:

这里会有所帮助

  $skills='Administrator,office';
  $result=mysql_query("SELECT * FROM candidate_skills 
  WHERE skill IN ($skills)) ;

【讨论】:

  • 这已经被建议并且不适用于我所追求的。
  • 下面的 Exadera37 已经建议