我有三张桌子:
我想计算使用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
表格
+-------+---------------+-----------------------------+-----------+
| ID | name | description | module_id |
+-------+---------------+-----------------------------+-----------+
| 18 | First task | Some useless description | 1 |
| 24 | Second task | Another useless description | 2 |
| 28 | Third task | NULL | 3 |
+-------+---------------+-----------------------------+-----------+
projects_modules
表
+-------+---------------+
| ID | name |
+-------+---------------+
| 1 | Module 1 |
| 2 | Module 2 |
| 3 | Module 3 |
+-------+---------------+
我需要的是特定模块的总小时数,但出于某种原因它给了我每个模块相同的时间。
我坚持下去。我做错了什么?
提前致谢
答案 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
条件。