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

Consulta correlacionada?

Estas en el tema de Consulta correlacionada? en el foro de Mysql en Foros del Web. Buenas a todos, tengo un problema y es que no me sale una consulta y no se si es que tengo que hacer consultas correlacionadas ...
  #1 (permalink)  
Antiguo 12/02/2009, 05:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 1
Consulta correlacionada?

Buenas a todos, tengo un problema y es que no me sale una consulta y no se si es que tengo que hacer consultas correlacionadas o no se... a ver os doy los datos:

Tengo una tabla actividades:
id, .... ,... ,.... fecha_inicio, fecha_fin

una tabla actividades_alumnos (intermedia)
id, actividad_id, alumno_id

una tabla alumnos
id, nombre, apellidos......

En la tabla actividades_alumnos controlo qué alumnos estan apuntados a que actividad (N:N).

La pregunta es... consulta que me muestre los alumnos que estan en conflicto por estar en dos o mas actividades cuyas fechas se crucen, mostrando el alumno y las actividades para las que hay conflicto.

Es lógico pensar que una actividad cruzada con otra es que si una actividad empieza el 1 de febrero y termina el 15... haya otra que empiece el 7 de febrero y termine el 20. Así si el alumno esta matriculado en las 2, se tiene que mostrar porque materialmente sería imposible.

Estoy dandole vueltas pero no doy con la solución.... ¿Alguna idea?
  #2 (permalink)  
Antiguo 12/02/2009, 11:40
 
Fecha de Ingreso: enero-2009
Mensajes: 31
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Consulta correlacionada?

tal vez deberias validar al momento de ingresar los datos por ejemplo al momento de ingresar datos en la tabla actividades_alumnos podrias preguntar si el alumno se encuentra y si es asi validar que la fecha_inicio que estas ingresando sea mayor a la fecha_fin de la que ya esta almacenada y asi te evitas mayores problemas
  #3 (permalink)  
Antiguo 13/02/2009, 00:38
 
Fecha de Ingreso: octubre-2007
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Consulta correlacionada?

El problema es que ya estan todos insertados (30.000 registros) y ahora me haría falta esa consulta para que al usuario administrador le saliese el mensaje de que hay varios alumnos en ese conflicto
  #4 (permalink)  
Antiguo 13/02/2009, 01:43
Avatar de sanchy  
Fecha de Ingreso: octubre-2008
Mensajes: 389
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consulta correlacionada?

vuelvo a insistir, como en otro topic. por q hacerlo con la consulta? por q no agarrar toda la tabla, asignarsela a una variable, y despues si, con la variable haces lo que quieras. me parece mucho mas facil
  #5 (permalink)  
Antiguo 13/02/2009, 09:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta correlacionada?

Probablemente sanchy tenga razón y con programación también podrías hacerlo, pero estamos en un foro de base de datos y te daré una respuesta de base de datos, en una consulta, aunque he de añadir que no sé si será más eficiente que hacer un par de consultas y utilizar algo de programación:
Código sql:
Ver original
  1. SELECT a.nombre, a.apellidos, ac.id, ac.actividad, ac.fecha_inicio, ac.fecha_fin
  2. FROM alumnos a
  3. INNER JOIN (
  4.  
  5. SELECT aa.alumno_id ID, t1.id1 ID1, t1.id2 ID2
  6. FROM actividades_alumnos aa
  7. INNER JOIN (
  8.  
  9. SELECT a.id id1, b.id id2
  10. FROM actividades a
  11. INNER JOIN actividades b
  12. WHERE (
  13. a.id <> b.id
  14. )
  15. AND (
  16. (
  17. b.fecha_inicio >= a.fecha_inicio
  18. AND b.fecha_inicio <= a.fecha_fin
  19. )
  20. OR (
  21. b.fecha_inicio <= a.fecha_inicio
  22. AND b.fecha_fin > a.fecha_inicio
  23. )
  24. )
  25. )t1 ON aa.actividad_id = t1.id1
  26. OR aa.actividad_id = t1.id2
  27. GROUP BY aa.alumno_id
  28. HAVING COUNT( * ) >2
  29. )t2 ON a.id = t2.ID
  30. INNER JOIN actividades ac ON ac.id = t2.ID1
  31. OR ac.id = t2.ID2
  32. ORDER BY a.id, ac.fecha_inicio, ac.fecha_fin

Última edición por jurena; 13/02/2009 a las 09:23
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 07:36.