2016-09-04 6 views
-1

私はカラム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を使ってどうすればいいですか?

+0

はい。あなたはPHPに言及しているので、そこで表示される問題を扱います。より柔軟でスケーラブル(スケールはこのインスタンスでは問題の可能性は低いですが) – Strawberry

答えて

0

期待した結果を得るには、ここで最も重要なgroup byを使用していません。毎日の結果を得るには、次のクエリを試してみてください。 PHPで毎週の結果ビューを取得するように変更することができます。

+0

これは私のクエリ全体ですか?そのメンバーの日曜日の勤務時間はどのように取得できますか? – JMA

+0

クエリを実行して出力を確認しましたか?それは日とユーザーとして行を与えます。いくつかのPHPロジックで7日ごとに列を取得できます – Riad

関連する問題