Comunidad de diseño web y desarrollo en internet online

Asistencia de alumnos... problema en la visualizacion

Citar            
MensajeEscrito el 21 Oct 2008 04:17 pm
Pueblo Clab..

Despues de muchas lunas viendo un sistema, me encuentro sin inspiracion.
He aqui mi dilema:

Tengo una BD que tiene una tabla de Asistencias, una de Alumnos y otra de Cursos.
Me interesa mostrar en una tabla la asistencia de los alumnos.
La tabla asistencias es mas o menos asi:

Código :

Id -- alumno_id -- curso_id -- fecha_dictado -- estado -- ciclo -- seccion
1 -- 415263 - 123 - 12/09/2008 - P -- 5 -- K
2 -- 415263 - 123 - 19/09/2008 - F -- 5 -- K
3 -- 456268 - 123 - 12/09/2008 - P -- 5 -- D
4 -- 456268 - 123 - 19/09/2008 - P -- 5 -- D


Como ven.. en la tabla asistencia estan todos los alumnos y se llena dia tras dia. Por lo que un alumno tiene "n" entradas establecidas por el dia en que se dicto su clase. Y las clases tambien son varias.
Esta tabla tengo que relacionarla con la de alumnos para visualizar el nombre del alumno y con la de cursos para jalar el nombre del mismo.

En fin... yo recupero todos los datos.. y he ahi mi dilema porque yo los recupero por ciclo y seccion y curso pero si se dan cuenta el nombre del mismo alumno se repite y yo necesito mostrar algo como esto por clase:

Código :

Alumno     -         Total Clases         --            Asistencias             -            Faltas       --            % Inasistencias

En donde si son cuatro alumnos.. solo me muestre los cuatro alumnos, empero al jalar los datos de la consulta me aparece el mismo alumno todas las veces en que hubo clases ya que si dicha clase se dicto 8 veces ocho veces aparece el alumno en mi tablita..
Si se que puede ser algo sencillo.. pero ahorita lo veo complicado...

¿Como deberia armar mi consulta o mi foreach en PHP para generar correctamente lo que les comento?

Mi consulta es esta:

Código :

SELECT Act.alumno_id,Alus.apellido_paterno,curso_codigo_ipp,Alus.apellido_materno, Alus.nombres,
                              Asis.dictado_fecha,Asis.estado,
                              Activos.ciclo,Activos.seccion
                              FROM (asistencias AS Asis
                              INNER JOIN activos AS Act
                              ON (Asis.alumno_id=Act.alumno_id))
                              INNER JOIN alumnos AS Alus 
                              ON ((Act.alumno_codigo=Alus.codigo))
                              WHERE curso_codigo ="'.$cod_cur.'"
                              GROUP BY  Act.alumno_id')


En mi PHP hago un foreach normal para recoger todos los registros.. pero no es exactamente lo que necesito ya que me bota el mismo usuario varias veces... y mi tabla imprime eso...
Ahora sin embargo para ver cuantas clases asistio tengo que contar de ese usuario cuantos estados "P" tiene y para inasistencia obviamente contar los que no son "P"

Alguna idea de la logica.. o mi consulta esta pesima??...
Help!!!

Por Camuss

498 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Lima City - Perú

chrome
Citar            
MensajeEscrito el 21 Oct 2008 05:13 pm
Interesante, por hoy estoy full busy, este dia no creo que me pueda sentar a pensarle, pero si para mañana no te han resuelto tus dudas/problemas, sin duda me encargo de resolverlo, me encantan los problemas de SQL. :|

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 21 Oct 2008 05:38 pm
:(

help!!

Por Camuss

498 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Lima City - Perú

chrome
Citar            
MensajeEscrito el 22 Oct 2008 05:32 pm
El p lo cuentas en PHP no en SQL verdad?

Pero bueno tienes que hacer dos SQL, primero haz uno que usarás para traer el nombre del alumno y sus generales.

Y otro para traer todas las faltas de sus cursos. No puedes mezclar información de un row con otra de varios.

Haz dos SQLs y con eso no deberías tener problema.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 22 Oct 2008 06:13 pm
Cierto Dano...

Ya lo tengo resuelto.
Hago dos consultas. Ambas similares pero la primera la agrupo por alumnos y sus ID. La segunda me devuelve todo.

En PHP armo un primer Foreach con la primera consulta que hice, o que permite recorrer solo la cantidad exacta de alumnos. Dentro de este tengo otro Foreach que es el que usa la segunda consulta, dentro de este ultimo foreach hago algo asi:

Código :

foreach ($consulta2 as $consulta_sql_2){
              if ($consulta_anterior['Alumno']['ID']==$consulta2['Alumno']['ID']){
                    if ($consulta2['Alumno']['estado]=="P"){
                           asistencia++;
                    }else{
                           inasistencia++;
                    }
              }
}
He inmediatamente pongo la impresion de lo que resulte. En realidad era mas sencillo de lo que pensaba es simplemente afuera recorrer la cantidad de alumnos y dentro recorrer toda la data buscando y comparando al alumno que este en ese momento en el primer foreach..asi se acumulan sus asistencias e inasistencias... inmediatamente despues se imprime..

Igual Dano agradezco mucho tu ayuda.. ya mas tarde te molestare con otra consulta en SQL... XD

Por Camuss

498 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Lima City - Perú

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.