0
我有两个表projects
和project_hours
,与一对多(一个项目,许多小时)。MySQL之间的多个日期之间的小时数总和
这里是我的两个表:
CREATE TABLE `projects` (
`project_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`client_id` int(10) unsigned NOT NULL,
`project_name` char(50) NOT NULL,
`project_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`project_id`),
KEY `project_owner` (`client_id`),
CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`client_id`) REFERENCES `clients` (`client_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `project_hours` (
`hours_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`project_id` int(10) unsigned NOT NULL,
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`end_time` datetime NOT NULL,
PRIMARY KEY (`hours_id`),
KEY `project_id` (`project_id`),
CONSTRAINT `project_hours_ibfk_1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想这样做的是选择的所有项目,并且得到的时间的总和,所以我有项目的总小时最终名单。所以如果我有1个项目,2个记录在project_hours中,我想返回1行,而不是2行。
这是我试过的。我得到的是2行,每个时间跨度小于1小时,因此current_hours显示为0
。我能做些什么来将这两行相加?得到1.50什么的?
select *, datediff(start_time, end_time) * 60 as current_hours from projects
left join project_hours using(project_id)
where client_id = 2
datediff返回一个不同的天。你的查询将永远不会工作,因为'some_number_of_days * 60'是** NOT **小时。 – 2013-04-25 17:05:56
哈哈,是的,我刚刚意识到这一点。 – 2013-04-25 17:07:23
我想我找到了答案 – 2013-04-25 17:10:04