简体   繁体   中英

Combining Multiple SQL Queries Into Single Query

I have three queries as below and I need to combine them into one. Does any body know how to do that?

$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);

Okay now that I understand the question, how about something like this:

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

Select the main ID, then 3 independent select statements return a count and joined up with the ID at the beginning.

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.

I combined my queries and I want to know is there any better way to combine those to improve efficiency?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM