Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Filtrar resultados consulta

Estas en el tema de Filtrar resultados consulta en el foro de PHP en Foros del Web. Hola! Tengo una consulta para obtener los alumnos reprobados (compara con la calificación minima aprobatoria de otra tabla) Código PHP: mysql_select_db ( $database_connection ,  $connection ...
  #1 (permalink)  
Antiguo 19/04/2013, 11:07
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Filtrar resultados consulta

Hola! Tengo una consulta para obtener los alumnos reprobados (compara con la calificación minima aprobatoria de otra tabla)
Código PHP:
mysql_select_db($database_connection$connection);
$query_alumnos "SELECT * FROM .... <calicifar.Minima  ";
$query_limit_alumnos sprintf("%s LIMIT %d, %d"$query_alumnos$startRow_alumnos$maxRows_alumnos);
$alumnos mysql_query($query_limit_alumnos$connection) or die(mysql_error());
$row_alumnos mysql_fetch_assoc($alumnos); 

Y asi muestro los resultados

Código PHP:
 <?php do { ?>

<td ><?php echo $row_alumnos['Nombre']; ?></td>
<td ><?php echo $row_alumnos['ApellidoPaterno']; ?></td>
<td ><?php echo $row_alumnos['ApellidoMaterno']; ?></td>
 <?php } while ($row_alumnosmysql_fetch_assoc($alumnos)); ?>

Hasta el momento funiona bien, logro ver a los alumnos reprobados (con el promedio menor a la calificación mínima aprobatoria)
Pero necesito mostrar solo a los que tengan 4 o más materias reprobadas...
Aqui surge mi duda como filtro a esos alumnos
Desde ya gracias
  #2 (permalink)  
Antiguo 19/04/2013, 12:10
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Se me ocurre un if antes del ciclo pero no se que compararía (como sabría el total de cada alumno)
  #3 (permalink)  
Antiguo 19/04/2013, 12:40
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Filtrar resultados consulta

Si estas haciendo una consulta sql no es necesario hacer ningun ciclo ni condicional, solamente se hace una consulta sql y listo.

Código SQL:
Ver original
  1. SELECT * FROM estudiantes WHERE nota<6;

Obviamente el numero 6 cambiara segun el sistema de calificación que manejes. (Yo he manejado aprobado con 5, con 10 segun el país) . No me parece que sea necesario traer el valor de ninguna otra tabla, es poco practico.
__________________
Blog de humor http://elcuasatar.net63.net/
  #4 (permalink)  
Antiguo 19/04/2013, 12:45
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Cita:
Iniciado por cuasatar Ver Mensaje
Si estas haciendo una consulta sql no es necesario hacer ningun ciclo ni condicional, solamente se hace una consulta sql y listo.

Código SQL:
Ver original
  1. SELECT * FROM estudiantes WHERE nota<6;

Obviamente el numero 6 cambiara segun el sistema de calificación que manejes. (Yo he manejado aprobado con 5, con 10 segun el país) . No me parece que sea necesario traer el valor de ninguna otra tabla, es poco practico.
No tengo problemas al obtener los resultados si traigo mi calificación mínima aprobatoria de otra tabla es porque esta puede variar.... el detalle no esta acá si no en como muestro a los alumnos con más de 3 asignaturas reprobadas ya q por ahora muestro a todos los alumnos aun con 1 , 2 o 3, etc reprobadas y el filtro final debe arrojarme solo los de 4 o mas aqui no encuentro la manera de hacerlo
  #5 (permalink)  
Antiguo 19/04/2013, 13:16
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Filtrar resultados consulta

aunque esto es tema de sql, y además no muestras la estructura de tu tabla, creo que podrías hacer algo como

select alumno,count(calificacion) as cuantas from tabla where calificacion<minima

esto te daría l alumno y cuantas calificaciones son menores a al mínima, no estoy seguro si se pudiera condicionar a que te mostrara los que tengan más de 4 reprobadas.
  #6 (permalink)  
Antiguo 19/04/2013, 14:11
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

entonces no puedo condicionar q solo los alumnos q aparecen 4 o mas veces en el do while (arrojados de la consulta previa)se muestrsn
  #7 (permalink)  
Antiguo 19/04/2013, 14:21
Avatar de jariza  
Fecha de Ingreso: agosto-2003
Ubicación: Málaga
Mensajes: 1.449
Antigüedad: 21 años, 3 meses
Puntos: 10
Respuesta: Filtrar resultados consulta

Hola,

Como sólo das una parte de la consulta SQL tengo una duda: ¿obtienes una asignatura aprobada por fila o cada fila es el conjunto de asignaturas aprobadas de cada alumno?

Sospecho que es la primera opción, si es así, desde PHP puedes conseguir lo de mostrar 4 o más realizando un recuento previo, más o menos...
Código PHP:
$totales = array();
while (
$row_alumnosmysql_fetch_assoc($alumnos)) {
    
$totales[$row['idalumno']]++;

Luego sólo tendrías que imprimir la información teniendo en cuenta este recuento, más o menos...
Código PHP:
foreach ($totales as $k => $v) {
    if (
$v 3) {
        
imprimir info del alumno cuyo id es $k.
   }

Estoy suponiendo que la base de datos tiene un identificador para cada alumno al margen del nombre. Si no es así podrías usar el nombre como identificador.

Este proceso tiene pinta de poderse hacer con una consulta SQL, pero de eso entienden más en el foro de bases de datos.

Un saludo :)
  #8 (permalink)  
Antiguo 19/04/2013, 14:43
Avatar de jariza  
Fecha de Ingreso: agosto-2003
Ubicación: Málaga
Mensajes: 1.449
Antigüedad: 21 años, 3 meses
Puntos: 10
Respuesta: Filtrar resultados consulta

He estado meditando un poco el asunto y creo que se podría usar una consulta análoga a:
Código MySQL:
Ver original
  1. SELECT * FROM notas WHERE id IN (SELECT id FROM notas WHERE nota < 5 GROUP BY id HAVING COUNT(*) > 3)

Aunque puede que esté tan mal formulada que venga alguien del foro de bases de datos y me rete a duelo XD
  #9 (permalink)  
Antiguo 19/04/2013, 17:21
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Filtrar resultados consulta

Cita:
Iniciado por ocp001a Ver Mensaje
aunque esto es tema de sql, y además no muestras la estructura de tu tabla, creo que podrías hacer algo como

select alumno,count(calificacion) as cuantas from tabla where calificacion<minima

esto te daría l alumno y cuantas calificaciones son menores a al mínima, no estoy seguro si se pudiera condicionar a que te mostrara los que tengan más de 4 reprobadas.
Código SQL:
Ver original
  1. SELECT alumno,COUNT(calificacion) cuantas FROM tabla WHERE calificacion<minima AND cuantas>3 GROUP BY id_estudiante

Igual como no sabemos la estructura de la tabla esto es pura especulación. La magia se le da bien a Harry Potter no a mi. (Por obvias razones no he probado la consulta pero creeria que podria funcionar. La solución de jariza parece buena pero creo que esta mal empleado el having, no lo reto a duelo porque yo tampoco soy el campeón de sql jajaja pero creo que el having solo se puede aplicar a la columna que ha sido agrupada. Igual creo que la idea es mas o menos esa. Que los campeones de sql nos corrijan si es el caso)

Cita:
No tengo problemas al obtener los resultados si traigo mi calificación mínima aprobatoria de otra tabla es porque esta puede variar....
Ni te digo la cantidad de años que he estudiado porque me delato la edad jajaja y jamas en todos los cursos que he realizado cambiaron la nota de aprobación. Eso que planteas es escasamente probable. Imaginate el lio que de un semestre a otro a los alumnos les cambiaran la nota de aprobación...yo quemo la universidad jajaja.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 19/04/2013 a las 18:12
  #10 (permalink)  
Antiguo 24/04/2013, 10:57
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Gracias por su ayuda no había estado por aca (perdón por no contestar antes) probaré lo que sugieren y si no me va muy bien xD tendré que molestar en MySql
  #11 (permalink)  
Antiguo 24/04/2013, 12:32
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

pues gracias he probado lo q me dicen y hasta el momento no he conseguido mostrar solo los q tienen 4 o mas materias
muestro a los que tienen desde una
  #12 (permalink)  
Antiguo 24/04/2013, 12:42
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Filtrar resultados consulta

Si es lo que entendí esta consulta te ayudara....
Código SQL:
Ver original
  1. SELECT
  2.     Nombre,Nota
  3. FROM
  4.     Tabla
  5. WHERE
  6.            Nota<6
  7. GROUP BY
  8.     Nombre,Nota
  9. HAVING
  10.     COUNT(Nombre)>3

Última edición por tomibolo; 24/04/2013 a las 12:49
  #13 (permalink)  
Antiguo 24/04/2013, 14:54
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Filtrar resultados consulta

tomibolo, tu respuesta es cercana, yo probe esta y si me funciona.

Código SQL:
Ver original
  1. SELECT nombre,COUNT(nombre)
  2. FROM `notas`
  3. WHERE nota <6
  4. GROUP BY nombre
  5. HAVING COUNT(nombre)>3

Briss este ejercicio lo hice por puro interes academico, pero si no te esmeras por analizar un poco las opciones que te dejan y generar tu propia respuesta en 5 dias no tendras tanta suerte y la gente te dejara de colaborar.
__________________
Blog de humor http://elcuasatar.net63.net/
  #14 (permalink)  
Antiguo 24/04/2013, 15:45
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Gracias chicos probaré lo que me dicen ammm no es que no me esmere he andado enferma y no he podido dedicarme del todo a esto.... pero hoy me siento mejor así que a hecharle ganas Gracias a todos
  #15 (permalink)  
Antiguo 24/04/2013, 17:22
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Tomibolo y cuasatar lo que sugieran funciona bien hice una tabla para probar y queda perfecto....

Pero yo estoy trabajando con 3 tablas y no loogro que quede
Código PHP:
"SELECT * FROM alumnos , programa, calificar  where alumnos.idalumno=calificar.idalumno and 
    alumnos.programa=programa.idprograma and 
    calificar.promedio<programa.Minima"

  #16 (permalink)  
Antiguo 24/04/2013, 17:37
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Filtrar resultados consulta

Cita:
Iniciado por Briss Ver Mensaje
Tomibolo y cuasatar lo que sugieran funciona bien hice una tabla para probar y queda perfecto....

Pero yo estoy trabajando con 3 tablas y no loogro que quede
Código PHP:
"SELECT * FROM alumnos , programa, calificar  where alumnos.idalumno=calificar.idalumno and 
    alumnos.programa=programa.idprograma and 
    calificar.promedio<programa.Minima"


Usa UNION, haces las 3 consultas por separado y las unes y san se acabo.

http://mysql.conclase.net/curso/?sqlsen=UNION

Te recomiendo que estudies mas a fondo sql para que este tipo de consultas no se te dificulten tanto.
__________________
Blog de humor http://elcuasatar.net63.net/
  #17 (permalink)  
Antiguo 24/04/2013, 17:39
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Cita:
Iniciado por cuasatar Ver Mensaje
Usa UNION, haces las 3 consultas por separado y las unes y san se acabo.

http://mysql.conclase.net/curso/?sqlsen=UNION
Select Union tienen que tener el mismo numero de campos las tablas lo cual no pasa en estas ammmm así como tengo la consulta funciona lo q no he logrado es agregar el count y el having para filtrar a los alumnos con 4 o mas materias
  #18 (permalink)  
Antiguo 24/04/2013, 18:03
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

lo puse asi

"SELECT idalumno,count(idalumno)
FROM alumnos,programa, calificar
WHERE alumnos.idalumno=calificar.idalumno and
alumnos.programa=programa.idprograma
and calificar.promedio<programa.Minima
GROUP BY idalumno
HAVING count(idalumno)>3";

Pero me arroja lo sig
Column 'idalumno' in field list is ambiguous
  #19 (permalink)  
Antiguo 24/04/2013, 18:15
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Filtrar resultados consulta

Bueno leyendo por ahi encontre que este era mi problema por si alguien le sirve

Eso sucede cuando en varias tablas tienes el mismo nombre de la columna y no le has indicado por medio del alias o el nombre de la tabla que pertenece. En esos casos debes indicar nombre y apellido, es decir nombreTabla.nombreColumna o aliasTabla.nombreColumna.

Etiquetas: filtrar, mysql, resultados, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:52.