Hola.
Soy desarrollador frontend pero estoy haciendo una aplicación para un amigo que en el backend tira de PHP para conectar con una base de datos MySQL. El problema es que en cuestión SQL tengo conocimientos básicos, lo que aprendí en la carrera hace muchos años ya y me enfrento a una sentencia un poco más compleja de lo habitual.
Tengo las siguientes tablas:
- Padres (Nif <clave primaria>, nombre, apellidos, ....)
- Alumnos (Id, nombre, apellidos, ...)
- Padre-alumno (IdPadre, IdAlumno, ...: tabla para relacionar a cada padre con su alumno pues es una relación "de n a n").
- Actividades (Id, nombre, precio, ...)
- Inscripciones (IdPadre, IdAlumno, IdActividad, PagoEfectivo, ...)
En la tabla de inscripciones tengo el ID de la actividad y el ID del alumno. Necesito el nombre del alumno y el nombre de la actividad, pero NO quiero meterlos en la tabla de inscripciones como campos propios porque si mañana cambia el nombre de la actividad me parecería una guarrada tener que ir a actualizar a la tabla de actividades el nombre de la misma.
Hay dos formas de hacerlo, bien y mal. Yo sé hacerlo de la forma chunga, pero no me sale de las narices hacer algo mal sabiendo de antemano que está mal y es una guarrada. Esta es la forma que yo había pensado:
- Recuperar las inscripciones con el ID del padre.
- Meterlas en un array $inscripciones
- Recorrer las inscripciones y para cada una, buscar en Alumnos y en Actividades el nombre del alumno y de la actividad.
Es decir, una query a "padre_alumno", un recorrido del array resultante (teóricamente corto, de 1 a 6 elementos), y para cada elemento del array, hacer dos consultas más, una a Alumnos y otra a Actividades.
GUARRADA TOTAL. No acepto hacerlo así porque estoy seguro que esto se puede hacer en una sola sentencia SQL.
¿Cómo lo haríais?
Gracias y disculpad mi torpeza en temas SQL. Seguro que para la mayoría de vosotros será una sentencia chupada, pero yo llevo ya demasiado tiempo haciendo frontend y pasando de SQL.