У меня есть две таблицы 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
Срок действия датой истекает в разные дни. ваш запрос никогда не будет работать так, как есть, потому что 'some_number_of_days * 60' ** ** ** **. –
ха-ха, да, я просто это понял. –
Я думаю, что нашел ответ, хотя –