我正在后端使用MySQL建立学生分数查看表。到目前为止,我有两个用于此功能的表。 activities
包含它所属的类代码,它自己的唯一活动代码,名称,活动的最高分以及将其添加为UNIX时间戳的时间。 outputs
是指每个活动的学生产出,其中包含活动代码,学生代码和分数。
TABLE activities
+----+------------+---------------+---------------+-----------+------------+
| id | class_code | activity_code | activity_name | max_score | time_added |
+----+------------+---------------+---------------+-----------+------------+
| 1 | Pq5H | xJDM | Seatwork 1 | 10 | 1578632389 |
+----+------------+---------------+---------------+-----------+------------+
| 2 | Pq5H | JXrA | Seatowrk 2 | 15 | 1578952035 |
+----+------------+---------------+---------------+-----------+------------+
| 3 | JXrA | b5Ud | Seatwork 1 | 10 | 1578975406 |
+----+------------+---------------+---------------+-----------+------------+
TABLE outputs
outputs.activity_code references activities.activity_code
+----+---------------+--------------+-------+
| id | activity_code | student_code | score |
+----+---------------+--------------+-------+
| 1 | xJDM | FAb1 | 10 |
+----+---------------+--------------+-------+
| 2 | JXrA | FAb1 | 14 |
+----+---------------+--------------+-------+
| 3 | xJDM | jIPA | 8 |
+----+---------------+--------------+-------+
| 4 | JXrA | jIPA | 12 |
+----+---------------+--------------+-------+
| 5 | Pq5H | FAb1 | 9 |
+----+---------------+--------------+-------+
| 6 | Pq5H | jIPA | 7 |
+----+---------------+--------------+-------+
在前端,我还有一个可编辑的表格,用户可以在其中编辑分数,如下所示:
FOR CLASS Pq5H
+---------+------------+------------+
| Student | Seatwork 1 | Seatwork 2 |
+---------+------------+------------+
| FAb1 | 10 | 14 |
+---------+------------+------------+
| jIPA | 8 | 12 |
+---------+------------+------------+
简而言之,列标题包含特定班级的活动,第一行包含该班级的学生,单元格是相应列中学生的分数。
用户还可以动态添加创建新活动的列,并在保存时将新分数添加到输出表中。
解决该问题的最佳方法是(1)填充HTML表和(2)将输出数据从新的HTML列保存到数据库中?到目前为止,我发现的所有问题都是用直接从数据库中取出的行填充HTML表格行,在这种情况下,这不是我所需要的。
我正在使用HTML,JS(带有jQuery),PHP和MySQL。
答案 0 :(得分:1)
使用获取数据
SELECT student_code,
activity_name,
score
FROM activities
[LEFT] JOIN outputs USING (activity_code)
WHERE class_code = ?
[ORDER BY 1,2]
并在客户端将其PIVOT。
或者
SELECT student_code,
CONCAT('{', GROUP_CONCAT(CONCAT('"', activity_name, '":"', score, '"') SEPARATOR ',') , '}') scores_in_json
FROM activities
JOIN outputs USING (activity_code)
GROUP BY student_code
WHERE class_code = ?
[ORDER BY 1,2]
,然后在客户端将JSON转换为PIVOT。