2016-09-04 7 views
-1

У меня есть таблица tbl_worklog с столбцами id (int), project_id (int), start_time (datetime), total (time), user_id (id).выбор данных ежедневно с использованием mysql

У меня также есть другая таблица tbl_projects с столбцами id (int), project_name (текст), organization_id (int). Project_id в первой таблице имеет внешний ключ для идентификатора во второй таблице.

У меня также есть organization стол с колонкой created_by (int). Идентификатор в таблице организации имеет внешний ключ для организации_id во второй таблице.

Итак, вот проблема, я хочу получить членов всех проектов, которые находятся в организациях, которые создали__ = 1. И в каждом члене я хочу ежедневно получать их работу в первой таблице. Например,

Members | Sun | Mon | Tue | Wed | Thu | Fri | Sat | Weekly Total 
--------------- 
John | 0:30:00 | 0:30:00 | 0:30:00 | 0:30:00 | 0:30:00 | 0:30:00 | 1:00:00 | 4:00:00 

Я использовал start_time в первой таблице, чтобы иметь возможность вычислить их повседневную работу.

Вот мой запрос, который не работает,

SELECT (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 7 DAY) AND start_time >= '2016-09-04' AND user_id=tbl_worklog.user_id) as weekly_total, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 1 DAY) AND start_time >= '2016-09-04' AND user_id=tbl_worklog.user_id) as sun, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 2 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 1 DAY) AND user_id=tbl_worklog.user_id) as mon, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 3 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 2 DAY) AND user_id=tbl_worklog.user_id) as tue, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 4 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 3 DAY) AND user_id=tbl_worklog.user_id) as wed, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 5 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 4 DAY) AND user_id=tbl_worklog.user_id) as thu, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 6 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 5 DAY) AND user_id=tbl_worklog.user_id) as fri, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total))) AS total_time from tbl_worklog WHERE start_time < date_add('2016-09-04', INTERVAL 7 DAY) AND start_time >= date_add('2016-09-04', INTERVAL 6 DAY) AND user_id=tbl_worklog.user_id) as sat, 
(SELECT name FROM tbl_accounts WHERE id=tbl_worklog.user_id) as name FROM tbl_worklog WHERE project_id IN (SELECT id FROM tbl_projects WHERE organization_id=1) 

Есть также любой другой способ сделать это простой и лучше практики? Как это сделать с помощью PDO?

+0

Да. Вы упоминаете PHP, поэтому обрабатывайте проблемы с отображением. Гораздо более гибкий и масштабируемый (хотя масштаб, по общему признанию, меньше проблем в этом случае) – Strawberry

ответ

0

Вы не использовали group by, что является самым важным здесь, чтобы получить ожидаемый результат. Попробуйте следующий запрос, чтобы получить ежедневный результат. Вы можете изменить, чтобы получить его еженедельный просмотр результатов в PHP.

select project_name, user_id, sum(time_to_sec(time)) as user_time, date(start_time) as 
daily_time , tw.project_id pID 
inner join tbl_projects tp on tp.id = tw.project_id 
inner join organization og on og.id = tp.organization_id 
where og.created_by = 1 group by user_id, pID, daily_time 
+0

Итак, это мой весь запрос? Как я могу получить воскресные часы работы этого участника? – JMA

+0

Вы запустили запрос и посмотрели вывод? он будет давать строки в виде дней и пользователей. Вы можете получить строки как столбцы каждые 7 дней с некоторой логикой php – Riad

Смежные вопросы