私はカラムid(int)、project_id(int)、start_time(datetime)、total(time)、user_id(id)を持つテーブルtbl_worklog
を持っています。mysqlを使用して毎日データを選択
私はまた、列id(int)、project_name(text)、organization_id(int)を持つ別のテーブルtbl_projects
を持っています。最初のテーブルのproject_idには、2番目のテーブルのIDへの外部キーがあります。
organization
テーブルには、列created_by(int)もあります。組織テーブル内のIDには、2番目のテーブルのorganization_idへの外部キーがあります。
ここに問題があります。私はcreated_by = 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を使ってどうすればいいですか?
はい。あなたはPHPに言及しているので、そこで表示される問題を扱います。より柔軟でスケーラブル(スケールはこのインスタンスでは問題の可能性は低いですが) – Strawberry