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

标签 php mysql database

我有两张 table ,一张用于参与者,一张用于入围候选人。 participants 表有所有参加测试的申请人名单,shortlisted 表只有入围候选人。一旦用户单击 UI 中的候选列表按钮,就会在第二个表中插入数据(这部分是正确的)。当用户点击同一个按钮两次时,候选人将从候选名单中删除(我在 shortlisted 表中有一个字段“status”,并且在其中设置了一个标志值 removed 到取消候选名单)

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

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

P.S 如果学生没有被选中一次,那么shortlisted 表中将不会有该学生的任何条目。如果学生被选中一次并被删除,shortlisted 表中将有一个包含他详细信息的条目,状态为已删除

我目前的查询如下

    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

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

更新: 我的要求是,如果在第二个表中候选人的状态 = 'removed',我应该得到 FALSE,如果没有匹配,我也应该得到 FALSE在第二个表中加入该用户。我希望别名 shortlist 的返回值是 TRUE 或 FALSE 我已经与上面的查询中的这一行有一定距离

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

最佳答案

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

此外,您的案例陈述需要修改以检查 gcs.status 是否“已删除”,例如:

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

关于php - 加入两个 MYSQL 数据库表并检查第二个表是否没有记录然后返回 FALSE,如果列有一些特定值则也返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31759157/

相关文章:

python - Flask、Postman 和 Mysql 多字段插入问题

database - DOS 数据库 - 需要帮助来识别它是什么

java - "derby dialect has been deprecated"

javascript - OpenTok: session 和 token 有什么区别?

php - 将多个选择从下拉列表存储到数据库的最佳方法是什么?

php - 如何使用 php 访问谷歌云数据存储?

php - 像 stackoverflow 一样打开 id 或单点登录

MySQL 具有多对多关系的多重联接

php - MySQL 查询上的连接重置

php - Laravel Eloquent Relationships 最新