Junta duas tabelas (com um relacionamento 1-M) em que a segunda tabela precisa ser 'achatada' em uma linha
Dada as seguintes tabelas:
Alun
+----+-------+
| id | Name |
+----+-------+
| 1 | Chris |
| 2 | Joe |
| 3 | Jack |
+----+-------+
Inscriçã
+---------------+------------+-----------+----------+
| enrollment_id | student_id | course_id | complete |
+---------------+------------+-----------+----------+
| 1 | 1 | 55 | true |
| 2 | 1 | 66 | true |
| 3 | 1 | 77 | true |
| 4 | 2 | 55 | true |
| 5 | 2 | 66 | false |
| 6 | 3 | 55 | false |
| 7 | 3 | 66 | true |
+---------------+------------+-----------+----------+
Gostaria do seguinte
+----+-------+-----------+-----------+-----------+
| id | Name | Course 55 | Course 66 | Course 77 |
+----+-------+-----------+-----------+-----------+
| 1 | Chris | true | true | true |
| 2 | Joe | true | false | NULL |
| 3 | Jack | false | true | NULL |
+----+-------+-----------+-----------+-----------+
Nota 1 Eu sei que o mysql não pode ter colunas dinâmicas (me corrija se estiver errado!), Então estou feliz com a consulta iniciada como:
SELECT id, name, course_55, course_66, course_77 etc...
Fico feliz com isso porque há um número fixo de cursos (4 para ser exato).Idealment Eu gostaria que fosse dinâmico; ou seja, não é necessário escrever manualmente cada curso na cláusula SELECT.
Nota 2 Isso precisa do mysql puro - não quero recorrer ao PH
tualmente, o banco de dados tem mais de 10000 alunos com mais de 10000 * 4 matrículas (pois existem exatamente 4 cursos e todos os alunos estão em todos os 4 módulos
Nota 3 Student.user_id é indexado, assim como matricula.enrollment_id, matricula.studente_id e matricula.curso_id.