0
SELECT
(SELECT COALESCE(SUM(t.hours), 0) AS allotted_hours
FROM tasks AS t
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name LIKE '%Ongoing%'
AND t.name NOT LIKE '%Placeholder%') AS allotted_hours_notcomplete_ongoing,
(SELECT COALESCE(SUM(tl.hours), 0) AS hr
FROM tasks AS t
INNER JOIN tasklogs AS tl ON (tl.tasks_id = t.id)
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name LIKE '%Ongoing%'
AND t.name NOT LIKE '%Placeholder%') AS logged_hours_notcomplete_ongoing,
(SELECT (allotted_hours_notcomplete_ongoing - logged_hours_notcomplete_ongoing) + logged_hours_notcomplete_ongoing) AS difference_notcomplete_ongoing,
(SELECT COALESCE(SUM(t.hours), 0) AS hr
FROM tasks AS t
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name NOT LIKE '%Ongoing%'
AND t.name NOT LIKE 'Placeholder%') AS allotted_hours_notcomplete_regular,
(SELECT COALESCE(SUM(tl.hours), 0) AS hr
FROM tasklogs AS tl
INNER JOIN tasks AS t ON (t.id = tl.tasks_id
AND t.projects_id = 8
AND t.complete = 100)
WHERE hourtypes_id IN (1,
2)) AS logged_hours_complete,
(SELECT logged_hours_complete + allotted_hours_notcomplete_regular + difference_notcomplete_ongoing) AS total
我基本上是試圖優化這個查詢,以計算給定項目的任務小時,然後再合併到我的基地SELECT * FROM projects
查詢。如何使用5個子查詢優化此查詢?
這些子查詢的1只從tasks
表中進行選擇,這些的2從tasks
選擇和INNER上tasklogs
或反之亦然,以及這些的2 JOIN是簡單的計算彼此。
有沒有更有效的方法來優化這個?我從來沒有使用臨時表,但也許我可以首先從給定的項目ID中選擇tasks
中的所有任務,然後從該臨時表中執行我以後的SELECT操作?希望得到任何建議。
如果需要,我可以用sql小提琴複製模式,但這需要一些時間。