从sql查询结果动态创建HTML表

时间:2014-08-06 01:56:21

标签: php mysql sql

如何编写sql查询以从多个MySQL表中获取行,然后将其输出到HTML表格,如下所示。 我已经尝试了好几个小时,但我还没有得到它。

以下是我尝试创建的HTML结构

----------------------------------------------------------------
|student_id  | full_name  |  TERM 1 | TERM2 |  TERM 3 | TERM 4 |
----------------------------------------------------------------
|     1      |   John Doe |   67    |   90  |   NA    |   NA   |
|     2      |   John Smi |   NA    |   NA  |   NA    |   NA   |
|     3      |   Doe John |   88    |   66  |   NA    |   NA   |
|     4      |   Mike Doe |   57    |   78  |   NA    |   NA   |
|     5      |   Doe Mike |   NA    |   NA  |   NA    |   NA   |
|     6      |   Sam  Doe |   NA    |   NA  |   NA    |   NA   |
----------------------------------------------------------------

以下是MySQL表的结构

--------------------------
| student_id | full_name |
--------------------------
|     1      | John Doe  |
|     2      | John Smi  |
|     3      | Doe John  |
|     4      | Mike Doe  |
|     5      | Doe Mike  |
|     6      | Sam  Doe  |
--------------------------

------------------------
| exam_id | exam_name  | 
------------------------
|   11    |   TERM 1   |
|   12    |   TERM 2   |
|   13    |   TERM 3   |
|   14    |   TERM 4   |
------------------------


----------------------------------------
| subject_id  | exam_id | subject_name | 
----------------------------------------
|      1      |    11   | mathematics  |
|      2      |    11   | english      |
|      3      |    11   | physics      |
|      4      |    12   | mathematics  |
|      5      |    12   | english      |
|      6      |    12   | physics      |
----------------------------------------


---------------------------------------------
| subject_id |   marks    |   student_id    |
---------------------------------------------
|      1     |   67       |        1        |
|      2     |   54       |        4        |
|      3     |   88       |        3        |
|      4     |   90       |        1        |
|      5     |   78       |        4        |
|      6     |   66       |        3        |
---------------------------------------------

感谢。

1 个答案:

答案 0 :(得分:3)

这是您想要的查询:

select s.student_id,
       s.full_name,
       avg(case when te.exam_name = 'TERM 1' then sm.marks else null end) as term_1,
       avg(case when te.exam_name = 'TERM 2' then sm.marks else null end) as term_2,
       avg(case when te.exam_name = 'TERM 3' then sm.marks else null end) as term_3,
       avg(case when te.exam_name = 'TERM 4' then sm.marks else null end) as term_4
  from students s
  left join subject_marks sm
    on s.student_id = sm.student_id
  left join subject_exams se
    on sm.subject_id = se.subject_id
  left join term_exams te
    on se.exam_id = te.exam_id
group by s.student_id,
         s.full_name

小提琴: http://sqlfiddle.com/#!2/fd1c82/1/0

至于将其输出到HTML表格,您需要查看PHP / MySQL教程。