2017-01-23 4 views
1

現在、私はPHPMySQLのCodeigniterフレームワークを使用してタイムテーブルプログラムを開発しています。私は配列としてscheduleテーブルの各行を取ることができるスケジュールデータからタイムテーブルビューを作成

+-------------+--------------+-----------+--------+ 
| Schedule ID | Subject Name | Day  | Period | 
+-------------+--------------+-----------+--------+ 
| 1   | Biology  | Monday | 1  | 
| 2   | Biology  | Wednesday | 2  | 
| 3   | Biology  | Friday | 3  | 
| 4   | Physics  | Tuesday | 8  | 
| 5   | Physics  | Thursday | 6  | 
| 6   | Math   | Monday | 7  | 
+-------------+--------------+-----------+--------+ 

:私は、以下のデータを有するscheduleテーブルを有しています。私は(HTMLテーブルを使用して)次のビューでタイムテーブルを作成したい:

+---+---------+---------+-----------+----------+---------+ 
| # | Monday | Tuesday | Wednesday | Thursday | Friday | 
+---+---------+---------+-----------+----------+---------+ 
| 1 | Biology |   |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 
| 2 |   |   | Biology |   |   | 
+---+---------+---------+-----------+----------+---------+ 
| 3 |   |   |   |   | Biology | 
+---+---------+---------+-----------+----------+---------+ 
| 4 |   |   |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 
| 5 |   |   |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 
| 6 |   |   |   | Physics |   | 
+---+---------+---------+-----------+----------+---------+ 
| 7 | Math |   |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 
| 8 |   | Physics |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 

私は上記の形式でテーブルを作成することに関するいかなる助けをいただければ幸いです。あなたがPeriod代わりのScheduleIDによってグループ化したいように見える

SELECT ScheduleID, 
     MAX(CASE WHEN Day = 'Monday' THEN SubjectName END) AS Monday, 
     MAX(CASE WHEN Day = 'Tuesday' THEN SubjectName END) AS Tuesday, 
     MAX(CASE WHEN Day = 'Wednesday' THEN SubjectName END) AS Wednesday, 
     MAX(CASE WHEN Day = 'Thursday' THEN SubjectName END) AS Thursday, 
     MAX(CASE WHEN Day = 'Friday' THEN SubjectName END) AS Friday 
FROM mytable 
GROUP BY ScheduleID 

Demo here

編集:

+0

あなたはこれまでにやっていることを共有することはできますか?どんなPHPコードであれ、私たちの役に立つでしょう。 –

答えて

1

はこれを試してみてください。あなたはすべての可能なPeriod値を保持するのインラインテーブルを作成するか、またはあなたはすでに持っている場合は、ルックアップテーブルを使用することができます。

SELECT t1.Period, 
     MAX(CASE WHEN Day = 'Monday' THEN SubjectName END) AS Monday, 
     MAX(CASE WHEN Day = 'Tuesday' THEN SubjectName END) AS Tuesday, 
     MAX(CASE WHEN Day = 'Wednesday' THEN SubjectName END) AS Wednesday, 
     MAX(CASE WHEN Day = 'Thursday' THEN SubjectName END) AS Thursday, 
     MAX(CASE WHEN Day = 'Friday' THEN SubjectName END) AS Friday 
FROM (SELECT 1 AS Period UNION ALL 
     SELECT 2 UNION ALL 
     SELECT 3 UNION ALL 
     SELECT 4 UNION ALL 
     SELECT 5 UNION ALL 
     SELECT 6 UNION ALL 
     SELECT 7 UNION ALL 
     SELECT 8) AS t1 
LEFT JOIN mytable AS t2 ON t1.Period = t2.Period 
GROUP BY t1.Period 

Demo here

+0

うわー!私はSQLを使ってこれを行うことができるのか分からなかった。ありがとう – danishjo

+0

@Giorgos私はあなたのアプローチが本当に好きでしたが、4行目と5行目を確認してください。あなたが*期間*の列をチェックしていないので、あなたの結果はdanishjoによって予想以上に異なります。 –

+0

@TuğcaEker?はい、そうです。私は答えを投稿した後でなければ問題に気づいた。彼は望みの結果を得るためにクエリを微調整する必要があります。 –

関連する問題