¿Esta consulta la personalizaron? (Método “get_historia_academica” del archivo co_alumnos.php)
No la veo igual a como es la publicada por el SIU.
¿Cual es la version del sistema? Porque estas vistas de historia académica cambiaron en las ultimas versiones (3.15, 3.16).
Lo del LEFT JOIN es porque seguramente registraron estas actividades al alumno con una version del plan de estudios en donde esa actividad no existe. En la tabla de actas de examen (sga_actas_detalle.plan_version)
Veo raro esta sentencia:
LEFT JOIN sga_actas_folios ON sga_actas_folios.id_acta = ha.id_acta
AND sga_actas_folios.folio =
(SELECT folio FROM sga_actas_folios
WHERE sga_actas_folios.id_acta = ha.id_acta
ORDER BY folio_fisico ASC
LIMIT 1) >>>> ESTO NO NECESARIAMENTE RECUPERA EL FOLIO FISICO DONDE ESTA EL ALUMNO EN EL ACTA EN EL CASO QUE EL ACTA TENGA MAS DE UN FOLIO. ESTA SENTENCIA RECUPERARÁ SIEMPRE EL 1ER FOLIO QUE ENCUENTRE DEL ACTA SIN VERIFICAR QUE EL ALUMNO ESTE EN ESE FOLIO.... <<<<<
Si quieren recuperar el folio fisico del examen, el join con esa tabla deberias agregar:
LEFT JOIN sga_actas_detalle ON (sga_actas_detalle.id_acta = ha.id_acta AND sga_actas_detalle.alumno = ha.alumno)
LEFT JOIN sga_actas_folios ON (sga_actas_folios.id_acta = sga_actas_detalle.id_acta AND sga_actas_folios.folio = sga_actas_detalle.folio)
¿Estas consultas devuelven datos? Si es asi esta ese alumno y ese acta en este listado?
-- Actas de examenes
SELECT p.apellido_nombres, a.nro_acta,*
FROM sga_actas as a
JOIN sga_actas_detalle as d on d.id_acta = a.id_acta
JOIN vw_mesas_examen as m on m.llamado_mesa = a.llamado_mesa
JOIN sga_alumnos as alu on alu.alumno = d.alumno
JOIN vw_personas as p on p.persona = alu.persona
WHERE (m.mesa_examen_elemento, d.plan_version) NOT IN (SELECT elemento, plan_version FROM vw_actividades_plan);
-- Actas de cursadas y promociones
SELECT p.apellido_nombres, a.nro_acta,*
FROM sga_actas as a
JOIN sga_actas_detalle as d on d.id_acta = a.id_acta
JOIN sga_comisiones as c on c.comision = a.comision
JOIN sga_alumnos as alu on alu.alumno = d.alumno
JOIN vw_personas as p on p.persona = alu.persona
WHERE (c.elemento, d.plan_version) NOT IN (SELECT elemento, plan_version FROM vw_actividades_plan);