Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Mejor manera de obtener esta consulta.

Estas en el tema de Mejor manera de obtener esta consulta. en el foro de Mysql en Foros del Web. Buen día. Esperando se encuentren bien, les informo que estoy desarrollando una aplicación de asistencia para alumnos de escuelas. En este sentido, por medio de ...
  #1 (permalink)  
Antiguo 29/08/2016, 08:21
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Mejor manera de obtener esta consulta.

Buen día.

Esperando se encuentren bien, les informo que estoy desarrollando una aplicación de asistencia para alumnos de escuelas.

En este sentido, por medio de este query mysql:

Código MySQL:
Ver original
  1. SELECT COUNT( tpa.field_asistencia_tipodeasistenci_value ) AS  'Asistencia', al.field_asistencia_alumno_uid AS  'uid'
  2. FROM field_data_field_asistencia_fecha a
  3. INNER JOIN field_data_field_asistencia_alumno al ON a.entity_id = al.entity_id
  4. INNER JOIN field_data_field_asistencia_tipodeasistenci tpa ON a.entity_id = tpa.entity_id
  5. WHERE a.field_asistencia_fecha_value >=  '2016-8-1'
  6. AND a.field_asistencia_fecha_value <=  '2016-8-31'
  7. AND tpa.field_asistencia_tipodeasistenci_value =  'Asistencia'
  8. GROUP BY al.field_asistencia_alumno_uid

Obtengo el uid del alumno el cual es el código del alumno así como la cantidad de asistencia mediante un mes.

Este query funciona correctamente.

Ahora bien, también necesito obtener la inasistencia y las excusas.

En este sentido, para no ejecutar diferentes query, intenté obtenerlo todo en una misma consulta, pero no se si es lo recomendable.
Código MySQL:
Ver original
  1. SELECT DISTINCT field_asistencia_alumno_uid AS 'uid',
  2.  
  3. (SELECT COUNT( tpa.field_asistencia_tipodeasistenci_value ) AS 'Asistencia'
  4. FROM field_data_field_asistencia_fecha a
  5. INNER JOIN field_data_field_asistencia_alumno al ON a.entity_id = al.entity_id
  6. INNER JOIN field_data_field_asistencia_tipodeasistenci tpa ON a.entity_id = tpa.entity_id
  7. WHERE a.field_asistencia_fecha_value >= '2016-8-1'
  8. AND a.field_asistencia_fecha_value <= '2016-8-31'
  9. AND tpa.field_asistencia_tipodeasistenci_value = 'Asistencia'
  10. AND al.field_asistencia_alumno_uid =5
  11. GROUP BY al.field_asistencia_alumno_uid) AS 'Asistencia',
  12.  
  13. (SELECT COUNT( tpa.field_asistencia_tipodeasistenci_value ) AS 'Inasistencia'
  14. FROM field_data_field_asistencia_fecha a
  15. INNER JOIN field_data_field_asistencia_alumno al ON a.entity_id = al.entity_id
  16. INNER JOIN field_data_field_asistencia_tipodeasistenci tpa ON a.entity_id = tpa.entity_id
  17. WHERE a.field_asistencia_fecha_value >= '2016-8-1'
  18. AND a.field_asistencia_fecha_value <= '2016-8-31'
  19. AND tpa.field_asistencia_tipodeasistenci_value = 'Inasistencia'
  20. AND al.field_asistencia_alumno_uid =5
  21. GROUP BY al.field_asistencia_alumno_uid) AS 'Inasistencia',
  22.  
  23. (SELECT COUNT( tpa.field_asistencia_tipodeasistenci_value ) AS 'Excusa'
  24. FROM field_data_field_asistencia_fecha a
  25. INNER JOIN field_data_field_asistencia_alumno al ON a.entity_id = al.entity_id
  26. INNER JOIN field_data_field_asistencia_tipodeasistenci tpa ON a.entity_id = tpa.entity_id
  27. WHERE a.field_asistencia_fecha_value >= '2016-8-1'
  28. AND a.field_asistencia_fecha_value <= '2016-8-31'
  29. AND tpa.field_asistencia_tipodeasistenci_value = 'Excusa'
  30. AND al.field_asistencia_alumno_uid =5
  31. GROUP BY al.field_asistencia_alumno_uid) AS 'Excusa'
  32.  
  33. from field_data_field_asistencia_alumno
  34. where field_asistencia_alumno_uid =5

El resultado sería así:
uid Asistencia Inasistencia Excusa
5 2 1 2

Quisiera saber si existe una mejor forma de hacerlo.

saludos.
  #2 (permalink)  
Antiguo 04/09/2016, 11:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Mejor manera de obtener esta consulta.

Usa "group by" en la consulta

Etiquetas: php, sql
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 19:39.