首页 > 解决方案 > 一个 mySQL 查询来检查一个选项,如果不是真的,另一个选项?

问题描述

我对 mySQL 很陌生。

我正在从表中查找某些记录,现在要求已经改变。起初,查询会提取在工作中被标记为船长的人的姓名以及其他一些条件。现在,如果没有队长,我的老板要我拉抄录员工作。如何在 mySQL 中执行此操作?

我的代码是:

$Q = $this->read_db->query('
        select DISTINCT j.id, j.reference, max(ja.FinalDue) as FinalDue, j.clientdue, j.pagecount, t.name, ja.iscaptain
            from `job` j 
            join `jobattachment` a on a.`jobid` = j.`id`
            join `jobassignment` ja on a.`jobid` = ja.`jobid`
            join `transcriber` t on ja.`transcriberid` = t.`id`
            where ja.`iscaptain` = 1 
            and ja.`deleted` != 1
            and (a.`editing` = 2 or a.`editing` = 3)
            and a.`redline` != 0
            and j.`complete` = 0
            group by j.id');
    return $Q->result_array();

如何让查询找到船长,只有在没有船长的情况下才找到ID在红线字段中的人?jobattachment 表中每个作业都有多条记录,如果附件被标记为红线,则抄写员的 ID 将在该字段中,否则将为空。

我尝试通过添加一个或来更改查询,但我不想要船长或转录员,如果没有船长,我只想要转录员。任何帮助将非常感激。

标签: mysql

解决方案


我经常玩这个,这就是我想出的解决方案。感谢所有回复的人。

public function getRedlinesNotCompleted() {
    $Q = $this->read_db->query('
        select j.id, j.reference, max(ja.FinalDue) as FinalDue, j.clientdue, j.pagecount, t.name, max(ja.iscaptain) as iscaptain
            from `job` j
            join `jobattachment` a on a.`jobid` = j.`id`
            join `jobassignment` ja on a.`jobid` = ja.`jobid`
            join `transcriber` t on ja.`transcriberid` = t.`id`
            where ja.`deleted` != 1
            and (a.`editing` = 2 or a.`editing` = 3)
            and a.`redline` != 0
            and j.`complete` = 0
            group by j.id');
    return $Q->result_array();
}

public function getCaptainNameForRedlineJobsNotCompleted($jobid) {
    $Q = $this->read_db->query('
    SELECT t.name, max(j.iscaptain) as iscaptain 
    FROM jobassignment j 
    JOIN transcriber t ON t.id = j.transcriberid
    WHERE j.jobid = ' . $jobid . ' AND j.iscaptain = 1');
    return $Q->row()->name;
}

推荐阅读