从多个MySQL数据库表填充表的最佳方法

时间:2020-01-14 04:40:33

标签: php html mysql

我正在后端使用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。

1 个答案:

答案 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。