2013-08-29 54 views
2

我有三个表。加入两个表并显示列的不同列表

  1. 考生

enter image description here

  • 技能

    enter image description here

  • CandidateToSkillMap

    enter image description here

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

    我怎样才能跟随他们的输出?

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

    计算机技能 -

    • 的MS Word(x)的
    • 的MS Excel(x)的
    • MS油漆( )

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

    编辑 -

    我有查询数据库,并加载数据到阵列 -

    $ 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 
    

    $候选人_profile_skills_map

    返回此Array技能和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) 
    
    +1

    向我们展示您迄今为止编写的代码。 – Itay

    回答

    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将不会为空,那么这意味着该人拥有该技能,并且您将其标记为 - 不。在列“candidate_id”

    0

    你可以使用这个

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

    0
    SELECT * FROM [Skills] s 
    LEFT JOIN [CandidateToSkillMap] csm ON csm.candidateprofileskill_id = s.id 
    WHERE csm.candidate_id = 1 
    

    这将返回所有行从技能表,你可以做一个空检查,以确定是否相关候选人具备该行的技能。

    下面是一些伪:

    for($row in $result) { 
        Skill name: $row["skill_name"] 
        Has skill?: $row["candidate_id"] != null ? "Yes" : "No" 
    } 
    
    0

    你可以试试这个

    select S.skill_name from CandidateToSkillMap CSM, Skills s where S.id=CSM.candidatesprofileskill_id and CSM.candidate_id=1 
    
    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部分然后查找这些值并为其指定true/false。

    Where部分过滤技能类型和候选人的ID。