2

我有三张桌子。

  1. 候选人

在此处输入图像描述

  1. 技能

    在此处输入图像描述

  2. 候选人到技能图

    在此处输入图像描述

候选人技能表映射在CandidateToSkillMap表中。在那个candidate_id 和skill_id 是外键。

我怎样才能得到他们的以下输出?

假设我需要显示 Candidate_id = 1 的计算机技能

计算机技能 -

  • MS 字 (x)
  • 微软 Excel (x)
  • 女士油漆 ()

它应该显示所有可用计算机技能的不同列表,并且前面应该有一个复选框。将检查特定候选人是否具有该技能。

编辑 -

我有查询数据库并将数据加载到数组中 -

$candidate_profile_computer_skills

这个数组提供了所有的计算机技能

array (size=3)
  0 => 
    object(Candidate\Model\CandidateProfileSkill)[317]
      public 'id' => string '1' (length=1)
      public 'skill_name' => string 'MS Word' (length=7)
      public 'candidate_id' => null
      public 'candidateprofileskill_id' => null
  1 => 
    object(Candidate\Model\CandidateProfileSkill)[223]
      public 'id' => string '3' (length=1)
      public 'skill_name' => string 'MS Excel' (length=8)
      public 'candidate_id' => null
      public 'candidateprofileskill_id' => null
  2 => 
    object(Candidate\Model\CandidateProfileSkill)[316]
      public 'id' => string '6' (length=1)
      public 'skill_name' => string 'MS Paint' (length=8)
      public 'candidate_id' => null
      public 'candidateprofileskill_id' => null

$candidate_profile_skills_map

此数组返回 Skills 和 CandidateToSkillMap 以及特定候选人的 LEFT JOIN (candidate_id = 1)

array (size=5)
  0 => 
    object(Candidate\Model\CandidateProfileSkill)[321]
      public 'id' => string '1' (length=1)
      public 'skill_name' => string 'MS Word' (length=7)
      public 'candidate_id' => string '1' (length=1)
      public 'candidateprofileskill_id' => string '1' (length=1)
  1 => 
    object(Candidate\Model\CandidateProfileSkill)[322]
      public 'id' => string '2' (length=1)
      public 'skill_name' => string 'Sinhala Reading' (length=15)
      public 'candidate_id' => string '1' (length=1)
      public 'candidateprofileskill_id' => string '2' (length=1)
  2 => 
    object(Candidate\Model\CandidateProfileSkill)[323]
      public 'id' => string '3' (length=1)
      public 'skill_name' => string 'MS Excel' (length=8)
      public 'candidate_id' => string '1' (length=1)
      public 'candidateprofileskill_id' => string '3' (length=1)
  3 => 
    object(Candidate\Model\CandidateProfileSkill)[324]
      public 'id' => string '4' (length=1)
      public 'skill_name' => string 'English Reading' (length=15)
      public 'candidate_id' => string '1' (length=1)
      public 'candidateprofileskill_id' => string '4' (length=1)
  4 => 
    object(Candidate\Model\CandidateProfileSkill)[325]
      public 'id' => string '4' (length=1)
      public 'skill_name' => string 'English Reading' (length=15)
      public 'candidate_id' => string '1' (length=1)
      public 'candidateprofileskill_id' => string '4' (length=1)
4

5 回答 5

0

尝试类似的东西

SELECT s.skill_name, (cm.Candidate_id IS NOT NULL) AS HasSkill

FROM Skills AS s
LEFT OUTER JOIN candidateToSkillMap AS cm
ON s.id = cm.candidateprofileskill_id
WHERE s.skill_type = 'Computer Literacy'
AND (Candidate_id = 1 OR Candidate_id IS NULL)

上述查询用于LEFT OUTER JOIN连接skillscandidatestoskillmap包含技能表中的所有行。这将确保candidatestoskillmap表中不匹配的任何行都包含为空值。

然后该select部分查找这些值并为其分配真/假。

Where部分筛选技能类型和候选人 ID。

于 2013-08-29T09:33:24.043 回答
0

你可以用这个

Select S.SkillName, count(*) from CandidateToSkillMap CTS, Skills S where S.Id = CTS.CandidateProfileSkillId group by CV.Id having CTS.CandidateId = 1

于 2013-08-29T09:18:04.243 回答
0
SELECT * FROM [Skills] s
LEFT JOIN [CandidateToSkillMap] csm ON csm.candidateprofileskill_id = s.id
WHERE csm.candidate_id = 1

这将返回技能表中的所有行,您可以对“candidate_id”列进行空值检查,以确定相关候选人是否具有该行的技能。

这里有一些伪:

for($row in $result) { 
    Skill name: $row["skill_name"]
    Has skill?: $row["candidate_id"] != null ? "Yes" : "No"
}
于 2013-08-29T09:19:24.637 回答
0

你可以试试这个

select S.skill_name from CandidateToSkillMap CSM, Skills s where  S.id=CSM.candidatesprofileskill_id and CSM.candidate_id=1
于 2013-08-29T09:19:54.893 回答
0

加入会做:

SELECT
    s.skill_name,
    CASE WHEN c.candidate_id IS NOT NULL THEN '(X)' ELSE '()' END has_skill
FROM
    skills s
    LEFT JOIN CandidateToSkillMap c ON s.skill_id = c.skill_id
WHERE
    c.candidate_id = 1

如果它成功加入右侧,因此c.candidate_id不会为空,那么这意味着该人具有该技能并且您将其标记为其他 - 不要。

于 2013-08-29T09:16:47.180 回答