Cómo reorganizar los resultados devueltos por la consulta de combinación interna
Tengo cinco tablas de estudiantes, clases, asignaturas, puntajes y puntajes. Estoy realizando una unión interna en estas tablas para obtener resultados. Así se ve mi esquema:
Mesa de alumnos:
students
--------
id *
name
class_id (fk)
Tabla de temas:
subjects
--------
id *
name
Mesa de clase:
classes
--------
id *
name
Tabla de términos:
terms
--------
id *
name
Tabla de puntuaciones:
scores
---------------
id *
student_id (fk)
subject_id (fk)
class_id (fk)
term_id (fk)
score
Ahora esta es la consulta que escribí para devolver resultados:
SELECT students.name as Name, subjects.name as Subject, classes.name as Class, terms.name as Term, scores as Score
// id 1 for student Nathan
// term 1 for first Period
// term 2 for second period
// term 3 for third period
from scores
inner join students
on students.id = scores.student_id
and scores.student_id = 1
inner join subjects
on subjects.id = scores.subject_id
and scores.student_id = 1
inner join classes
on classes.id = scores.class_id
and scores.student_id = 1
inner join terms
on terms.id = scores.term_id
and scores.student_id = 1
where scores.term_id = 1 or scores.term_id = 2 or scores.term_id = 3
ORDER BY scores.term_id;
Este es el resultado devuelto por la consulta:
Esto, sin duda, está devolviendo el resultado correcto, pero el pequeño problema que tengo es que no está formateado o estructurado de la manera que lo necesito. Esto es un poco de luz sobre cómo quiero que sea estructura:
PerioOne, PeriodTwo y PeriodThree corresponden a los identificadores de término en la tabla de puntajes con sus puntajes respectivamente. La imagen de arriba muestra los resultados finales de cómo se mostrará en una tabla html.
Así es como quiero que se devuelvan los resultados en mysql:
Name | subject | class | first Period | Second Period | Third Period
--------------------------------------------------------------------
Nathan | 1 | 1 | 96 | 71 | 74
Nathan | 2 | 1 | 96 | 71 | 74
¿Hay alguna manera de reestructurar mi consulta para hacer esto? Para mayor claridad, aquí están los datos en mi tabla de puntajes: