加入两个MYSQL数据库表并检查第二个表是否没有记录然后返回FALSE,如果列有某个特定值,那么也是FALSE

时间:2015-08-01 06:49:38

标签: php mysql database

我有两个表供参与者使用,一个表适用于入围候选人。 参与者表包含测试所有申请人的列表,而入围表仅列入候选人名单。在第二个表中,一旦用户点击UI中的候选名单按钮就会插入数据(这部分是正确的)。当用户点击两次相同的按钮时,候选人将从候选名单中删除(我在入围表中有“状态”字段,并且标记值已移除在其中设置为取消候选人名单

现在,当我尝试使用以下查询拉出所有候选项时,我没有得到所需的输出。

我的要求是拉出所有未入围的候选人。

P.S如果学生未被选中一次,则该学生将不会在入围表中输入任何内容。如果学生被选中一次并被删除,则会在入围表格中输入详细信息,状态已删除

我目前的查询如下

    SELECT DISTINCT(gca.leaderEmail)lemail,
gca.leaderId,
gca.leaderName, 
gca.leaderMobile, 
gca.clgName, 
gca.t1Name, 
gca.t2Name, 
gca.id caseApplyId, 
gca.caseId caseId, 
gu.profile_pic,
        CASE WHEN gcs.id IS NULL then FALSE else TRUE end as shortlist
        FROM gmmu_case_apply gca
        LEFT JOIN gmmu_users gu ON gu.id = gca.leaderId AND gca.leaderId <> 0
        LEFT JOIN gmmu_case_shortlist gcs ON gcs.applicantId = gca.id
        WHERE gca.caseId = $caseId

你能帮我弄清楚我在这里做错了什么来实现我想要的输出

更新 我的要求是我应该 FALSE 如果在第二个表中候选人的状态='已移除',并且 FALSE 以防无法匹配在第二个表中为该用户加入。我希望别名候选名单的返回为TRUE或FALSE我在上面的查询中与此行已达到一定距离

CASE WHEN gcs.id IS NULL then FALSE else TRUE end as shortlist

2 个答案:

答案 0 :(得分:0)

我相信您需要将gmmu_case_shortlist上的联接更改为LEFT JOIN。编写的查询只返回gca和gcs中的记录。

此外,您的案例陈述需要修改以检查gcs.status是否已删除&#39;像:

CASE WHEN gcs.status='removed' THEN FALSE 
     WHEN gcs.id is null THEN FALSE 
     else TRUE 
end as shortlist

答案 1 :(得分:0)

好的家伙终于解决了这个问题,感谢@MartinPicker的帮助,所以我的新查询是

    SELECT DISTINCT(gca.leaderEmail)lemail,
gca.leaderId,
gca.leaderName, 
gca.leaderMobile, 
gca.clgName, 
gca.t1Name, 
gca.t2Name, 
gca.id caseApplyId, 
gca.caseId caseId, 
gu.profile_pic,
        CASE WHEN gcs.id IS NULL OR gcs.currentStatus = 'removed' then FALSE else TRUE end as shortlist
        FROM gmmu_case_apply gca
        LEFT JOIN gmmu_users gu ON gu.id = gca.leaderId AND gca.leaderId <> 0
        LEFT JOIN gmmu_case_shortlist gcs ON gcs.applicantId = gca.id
        WHERE gca.caseId = $caseId