Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/03/2012, 18:44
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta de validacion

Cita:
dame una idea de como hacer esto?
La mejor solución suele ser usar el razonamiento...

Mira, hay cuatro condiciones que no se deben dar para validar un horario entrante, pero tienes que hacerlo con los dos parámetros y no con uno solo:
1) Que el inicio y el final del periodo entrante esté completamente contenido en un turno ya dado (solapamiento total).
2) Que el inicio del turno nuevo esté entre el inicio y el final de un turno ya dado (solapamiento superior).
3) Que el final del turno nuevo esté entre el inicio y el final de un turno ya dado (solapamiento inferior).
4) Que el un turno dado quede completamente contenido en el tuno nuevo (solapamiento por exceso).
La condición 1) se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end)
  2. ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end)
La condición 2 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end)
  2. ('2012-03-13 10:20:00' >= Date_end)
La condición 3 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' <= Date_start)
  2. ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end)
La condición 4 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' <= Date_start)
  2. ('2012-03-13 10:20:00' >= Date_end)
En otras palabras, para cubrir todas las posibilidades necesitarías:

Código MySQL:
Ver original
  1. (('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end) AND ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end))
  2. (('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end) AND ('2012-03-13 10:20:00' >= Date_end))
  3. (('2012-03-13 09:00:00' <= Date_start) AND ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end))
  4. (('2012-03-13 09:00:00' <= Date_start) AND ('2012-03-13 10:20:00' >= Date_end))

No te espantes por lo kilométrico. He visto búsquedas más complicadas que eso...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)