Comunidad de diseño web y desarrollo en internet online

unknown column in 'on clause'

Citar            
MensajeEscrito el 15 Oct 2013 08:38 pm
Hola a todos, como todo novato es que tengo una gran laguna mental en la cual no puedo salir. Tengo esta consulta la cual funciona muy bien. Me devuelve la cantidad de alumnos que han asistido al menos a una clase por cada curso.

Código PHP :

//verifico que al menos haya asistido a una clase
               $result02=mysql_query ("SELECT r0.dni, r2.apellido_nombre, count(r0.dni) Cant_presente, r1.teoricas, ( (count(r0.dni) * 100) / r1.teoricas ) porcentaje, r1.actividad FROM asistencia r0 
            INNER JOIN inscripciones r3 ON r3.id_act = r0.id_act
            INNER JOIN actividades r1 ON r1.id_act = r0.id_act 
            INNER JOIN alumnos r2 ON r2.dni = r0.dni 
            WHERE r0.dni=r3.dni AND r3.id_act=$identificacion_curso AND (r0.asistencia = 'presente' OR r0.asistencia='P')
            GROUP BY r0.dni, r0.id_act 
            HAVING porcentaje >= 1 
            ORDER BY r1.actividad ");


la cual la muestro asi:

Código PHP :

 $totalrows02=mysql_num_rows ($result02);
echo $totalrows02;


todas este código dentro de un while.
El problema es que ahora necesito saber el rango de edades de esos alumnos asistidos al menos a una clase. En la base he hecho una view en donde tengo todas las edades de todos los alumnos, sin filtrar por asistencias, ni inscripción de cursos ni nada. La consulta es esta:

Código PHP :

//cuento edades
$edades=mysql_query("SELECT r0.dni, r2.apellido_nombre, count(r0.dni) Cant_presente, r1.teoricas, ( (count(r0.dni) * 100) / r1.teoricas ) porcentaje, r1.actividad, r4.edad FROM asistencia r0
            INNER JOIN inscripciones r3 ON r3.id_act = r0.id_act
            INNER JOIN actividades r1 ON r1.id_act = r0.id_act 
            INNER JOIN alumnos r2 ON r2.dni = r0.dni 
            INNER JOIN alumnosedades r4 ON r4.id_act = r0.id_act
            WHERE r0.dni=r3.dni AND r3.id_act=$identificacion_curso AND (r0.asistencia = 'presente' OR r0.asistencia='P') and r4.edad > 25 
            GROUP BY r4.dni, r4.id_act 
            HAVING porcentaje >= 1
            ORDER BY r4.alumnosedades ") or die("Error en: $edades: " . mysql_error()) ;


y la quiero mostar así, todo esto también dentro del mismo while:

Código PHP :

 $ver_edades=mysql_num_rows($edades);
echo $ver_edades;


pero me devuelve el error de Unknown column 'r4.alumnosedades' in 'order clause'. Ya he intentado hacer todo tipo de cambios pero no logro que me cuente , por ej, la contidad de alumnos mayores de 25 años que asistieron al menos a una clase. Desde ya muchas gracias y espero ansiosamente que puedan entenderme y ayudarme.

Por tvzbien

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Oct 2013 12:09 pm
La tabla r4 no tiene el campo "alumnosedades". Al ver la consulta parece que r4 no es más que un alias de una tabla que se llama alumnosedades y que el campo que en realidad querías usar como ordenación era "edad".

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 16 Oct 2013 12:56 pm
Ufff que erro grosero el mío. Ante todo muchas gracias por la respuesta DriverOp. Así es, si es cierto lo de la tabla pero lo he corregido y sigo sin poder tener los resultados de las consultas. Ahora me devuelve el siguiente error " Query execution was interrupted " y no me trae ningún dato.

Por tvzbien

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Oct 2013 07:34 pm
Seguramente eso sucede porque la consulta demora mucho tiempo en procesarse.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 Oct 2013 12:13 pm
Hola amigos después de unos días de ausencia me hago presente para comentar que he solucionado mi problema a través de la siguiente consulta la cual no estaba muy errada con respecto a la original.

Código PHP :

$edades=mysql_query("SELECT r0.dni, r2.apellido_nombre, count(r0.dni) Cant_presente, r1.teoricas, ( (count(r0.dni) * 100) / r1.teoricas ) porcentaje, r1.actividad, r4.edad FROM asistencia r0
                INNER JOIN inscripciones r3 ON r3.id_act = r0.id_act
            INNER JOIN actividades r1 ON r1.id_act = r0.id_act 
            INNER JOIN alumnos r2 ON r2.dni = r0.dni 
            INNER JOIN alumnosedades r4 ON r4.dni = r0.dni
            WHERE r0.dni=r3.dni AND r3.id_act=$identificacion_curso AND (r0.asistencia = 'presente' OR r0.asistencia='P') 
            GROUP BY r0.dni, r0.id_act  
            HAVING r4.edad = 25 and porcentaje >= 1 
            ORDER BY r1.actividad") or die("Error en: $edades: " . mysql_error()) ;

$ver_edades=mysql_num_rows($edades);

echo $ver_edades;


Hasta aquí todo bien, pero ahora el problema, que no se porque sucede, es que me tarda muchisimo en mostrar los resultados de la consulta. La base y el sistema está todo montado en un servidor remoto donde también tengo mi sitio web.

Por tvzbien

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2013 02:25 pm
Por que puede que sean demasiados registros que verificar, y como haces un Join, va buscando y completando la ocnsulta poco a poco.

Tambien depende de las caracteristicas del servidor.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

firefox

 

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