Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个SQL查询组合到单个查询中_Sql - Fatal编程技术网

将多个SQL查询组合到单个查询中

将多个SQL查询组合到单个查询中,sql,Sql,我有三个问题,如下所示,我需要将它们合并为一个问题。有人知道怎么做吗 $myTasks = ""; $query = "SELECT taskID_PK " . "FROM tasks t " . "LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ". "LEFT JOIN task_attachments a ON a.taskID_FK = t.task

我有三个问题,如下所示,我需要将它们合并为一个问题。有人知道怎么做吗

$myTasks = "";
$query = "SELECT taskID_PK " .
            "FROM tasks t " . 
            "LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
            "LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
            "LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
            " WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK  = {$G_CLIENID} AND categoryID_FK !=0  group by taskID_PK ";

$RawData = db::select($query);
$myTasks= count($RawData);

$closeTasks = "";
$query = "SELECT taskID_PK,taskTitle,taskDescn,categoryID_FK,priority,date_format(createDate, '%d/%m/%Y') as createDate,ticketID_FK,
            date_format(dueDate, '%d/%m/%Y') as dueDate ,assignByID_FK,createTime,  taskStatus,closedDate,employeeName ,attachmentID_PK " .
            "FROM tasks t " . 
            "LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
            "LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
            "LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
            " WHERE TRUE AND isArchive != 1 AND (taskStatus != 1 ){$taskCreateClause} AND categoryID_FK !=0  group by taskID_PK ";
$RawData = db::select($query);
$closeTasks = count($RawData);

$workLoad ="";
$query = "SELECT taskID_PK,taskTitle,taskDescn,categoryID_FK,priority,date_format(createDate, '%m/%d/%Y') as createDate,ticketID_FK,
            date_format(dueDate, '%m/%d/%Y') as dueDate ,assignByID_FK,createTime,  taskStatus,closedDate,employeeName ,clientID_FK " .
            "FROM task_assignee ta " . 
            "LEFT JOIN tasks t ON ta.taskID_FK = t.taskID_PK ".
            "LEFT JOIN employee e ON e.employeeID_PK = ta.clientID_FK ".
            " WHERE TRUE AND taskStatus = 1  ";
$RawData = db::select($query);
$workLoad = count($RawData);

好吧,现在我明白了这个问题,像这样怎么样:

select a.taskID_PK,
     (Select count(*)) .
        "FROM tasks t " . 
        "LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
        "LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
        "LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
        " WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK  =    {$G_CLIENID} AND categoryID_FK !=0  
         and task_ID_PK = a.taskID_PK) as Count1,
         group by taskID_PK 

....
from tasks
选择主ID,然后3个独立的Select语句返回一个计数,并在开始时与ID合并

SELECT
       (SELECT(COUNT(DISTINCT t.taskID_PK))
                FROM tasks t
                LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
                LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK
                LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
                 WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND categoryID_FK !=0)as activetasks,
        (SELECT(COUNT(DISTINCT t.taskID_PK))
                FROM tasks t
                LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
        LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
                 WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK=1 AND categoryID_FK !=0)as mytasks,
       (SELECT(COUNT(DISTINCT t.taskID_PK))
                FROM tasks t
                LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
        LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
                WHERE TRUE AND isArchive != 1 AND taskStatus != 1 AND categoryID_FK !=0)as cloastasks,
        (SELECT(COUNT(t.taskID_PK))
        FROM task_assignee ta
                LEFT JOIN tasks t ON ta.taskID_FK = t.taskID_PK
                LEFT JOIN employee e ON e.employeeID_PK = ta.clientID_FK
                 WHERE TRUE AND taskStatus = 1)as workload,
        (SELECT(COUNT(DISTINCT t.taskID_PK))
                FROM tasks t
                LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
                LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK
                LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
                 WHERE TRUE AND isArchive = 1 AND categoryID_FK !=0)as archivetasks.

我组合了我的查询,我想知道有没有更好的方法来组合这些查询以提高效率?

取决于您所说的“合并为一个”的含义。您可以使用[union operator][1]将底部的两个查询合并为一个查询,因为它们选择的字段相同。你想用第一个做什么?[1] :如果我在第一个字段中有相同的字段集,那么如何使用Union将这些字段与out合并我仍然不确定您到底想做什么,但听起来像是我的in运算符就是您想要的?如果您需要在基于第一个查询的第二个查询中选择某些内容,您可以执行类似于select id、title from tasks的操作,其中select taskID\u PK from tasks中的id。。。。这就是你想要的吗?上面三个查询返回不同的结果,我想在html表中显示每个结果的计数。有没有办法使用IF组合这些结果?我像这样组合了我的问题。