从时间表数据创建时间 table 视图
Create time table view from schedule data
目前我正在 PHP
和 MySQL
中使用 Codeigniter 框架开发时间 table 程序。我有 schedule
table 具有以下数据:
+-------------+--------------+-----------+--------+
| 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
table 的每一行作为数组。我想在下面的视图中创建一个时间 table(使用 HTML
table):
+---+---------+---------+-----------+----------+---------+
| # | Monday | Tuesday | Wednesday | Thursday | Friday |
+---+---------+---------+-----------+----------+---------+
| 1 | Biology | | | | |
+---+---------+---------+-----------+----------+---------+
| 2 | | | Biology | | |
+---+---------+---------+-----------+----------+---------+
| 3 | | | | | Biology |
+---+---------+---------+-----------+----------+---------+
| 4 | | | | | |
+---+---------+---------+-----------+----------+---------+
| 5 | | | | | |
+---+---------+---------+-----------+----------+---------+
| 6 | | | | Physics | |
+---+---------+---------+-----------+----------+---------+
| 7 | Math | | | | |
+---+---------+---------+-----------+----------+---------+
| 8 | | Physics | | | |
+---+---------+---------+-----------+----------+---------+
对于以上述格式创建 table 的任何帮助,我将不胜感激。
试试这个:
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
编辑:
您似乎想按 Period
而不是 ScheduleID
分组。您可以创建一个 in-line table 来保存所有可能的 Period
值,或者如果您已经有一个,则使用查找 table:
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
目前我正在 PHP
和 MySQL
中使用 Codeigniter 框架开发时间 table 程序。我有 schedule
table 具有以下数据:
+-------------+--------------+-----------+--------+
| 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
table 的每一行作为数组。我想在下面的视图中创建一个时间 table(使用 HTML
table):
+---+---------+---------+-----------+----------+---------+
| # | Monday | Tuesday | Wednesday | Thursday | Friday |
+---+---------+---------+-----------+----------+---------+
| 1 | Biology | | | | |
+---+---------+---------+-----------+----------+---------+
| 2 | | | Biology | | |
+---+---------+---------+-----------+----------+---------+
| 3 | | | | | Biology |
+---+---------+---------+-----------+----------+---------+
| 4 | | | | | |
+---+---------+---------+-----------+----------+---------+
| 5 | | | | | |
+---+---------+---------+-----------+----------+---------+
| 6 | | | | Physics | |
+---+---------+---------+-----------+----------+---------+
| 7 | Math | | | | |
+---+---------+---------+-----------+----------+---------+
| 8 | | Physics | | | |
+---+---------+---------+-----------+----------+---------+
对于以上述格式创建 table 的任何帮助,我将不胜感激。
试试这个:
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
编辑:
您似乎想按 Period
而不是 ScheduleID
分组。您可以创建一个 in-line table 来保存所有可能的 Period
值,或者如果您已经有一个,则使用查找 table:
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