2015-10-05 56 views
0

我有三個表:總和給出錯誤的總

  1. users_timings_log
  2. projects_tasks
  3. projects_modules

我想計算花在總小時以module_id 2爲例的任務

我對它使用以下查詢:

SELECT SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, `start_date`, `end_date`))) 
AS `total_hours` 
FROM `users_timings_log` 
INNER JOIN `projects_tasks` ON users_timings_log.type_id = projects_tasks.id 
LEFT JOIN `projects_modules` ON projects_tasks.module_id = '2' 
WHERE `type` = '0' 

這是我users_timings_log

+-------+---------------------+---------------------+------+---------+ 
| ID | start_date   | end_date   | type | type_id | 
+-------+---------------------+---------------------+------+---------+ 
| 1 | 2015-09-17 09:00:00 | 2015-09-17 19:00:00 | 1 | 28  | 
| 2 | 2015-09-17 07:00:00 | 2015-09-17 12:00:00 | 1 | 24  | 
| 3 | 2015-09-17 08:00:00 | 2015-09-17 16:15:00 | 1 | 18  | 
| 4 | 2015-09-17 10:00:00 | 2015-09-17 17:00:00 | 1 | 24  | 
+-------+---------------------+---------------------+------+---------+ 

這裏的結構是我projects_tasks表的結構

結構表的 projects_modules
+-------+---------------+-----------------------------+-----------+ 
| ID | name   | description     | module_id | 
+-------+---------------+-----------------------------+-----------+ 
| 18 | First task | Some useless description | 1   | 
| 24 | Second task | Another useless description | 2   | 
| 28 | Third task | NULL      | 3   | 
+-------+---------------+-----------------------------+-----------+ 

+-------+---------------+ 
| ID | name   | 
+-------+---------------+ 
| 1 | Module 1  | 
| 2 | Module 2  | 
| 3 | Module 3  | 
+-------+---------------+ 

我需要的是某個特定模塊的小時總數,但由於某種原因,它給了我每個模塊相同的時間量。

我被卡住了。我究竟做錯了什麼?

在此先感謝

+0

和users_timings_log.id總是1(類型)? – Strawberry

+0

對不起,我會改變 –

+0

是的類型是在這種情況下總是1,因爲。它曾經是枚舉(0,1),但決定撤銷0.我稍後會改變它。 –

回答

1

你需要一個GROUP BY和適當JOIN

SELECT pt.module_id, 
     SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, ul.`start_date`, ul.`end_date`))) 
AS `total_hours` 
FROM `users_timings_log` ul INNER JOIN 
    `projects_tasks` pt 
    ON ul.type_id = pt.id 
WHERE `type` = '0' 
GROUP BY pt.module_id; 

如果你只想要一個模塊,然後添加一個WHERE條款用於這一目的。

我還添加了表別名,所以查詢更容易編寫和閱讀。

我應該補充一句,問題與您的查詢是它沒有適當的JOIN條件爲projects_modules。你似乎不需要那張桌子,所以刪除桌子很好。如果您需要該表中的列,請添加相應的JOIN條件。

+0

在你的查詢中,你說要選擇'pt.module_id'。這可能是因爲「INNER JOIN」? –

+0

@JeroenBellemans。 。 。是的,這就是查詢知道如何找到該列的值的方式。 –

+0

好的,謝謝。我會試試這個! :) –