2017-01-23 77 views
1

當前我正在開發一個使用Codeigniter框架的時間表程序PHPMySQL。我有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 |   |   |   | 
+---+---------+---------+-----------+----------+---------+ 

我將不勝感激關於創建於上述格式表中的任何幫助。

+0

你能分享你到目前爲止做了什麼?任何PHP代碼都會對我們有所幫助。 –

回答

1

試試這個:

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

編輯:

你似乎通過Period,而不是ScheduleID想組。您可以創建一個在線表格包含所有可能的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?是的,你說得對。只有在我發佈了我的答案後,我才注意到這個問題。他必須稍微調整一下這個查詢來達到預期的結果。 –