2013-04-25 103 views
0

我有兩個表projectsproject_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 
+0

datediff返回一個不同的天。你的查詢將永遠不會工作,因爲'some_number_of_days * 60'是** NOT **小時。 – 2013-04-25 17:05:56

+0

哈哈,是的,我剛剛意識到這一點。 – 2013-04-25 17:07:23

+0

我想我找到了答案 – 2013-04-25 17:10:04

回答

0

這裏我們開始吧!這似乎正在做我在找的東西:

select *, sum(time_to_sec(timediff(end_time, start_time)))/60/60 as current_hours from projects 
left join project_hours using(project_id) 
where client_id = 2 
group by project_id