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:
La condición 2 se verifica si:
Código MySQL:
Ver original('2012-03-13 09:00:00' BETWEEN Date_start
AND Date_end
) ('2012-03-13 10:20:00' >= Date_end)
La condición 3 se verifica si:
Código MySQL:
Ver original('2012-03-13 09:00:00' <= Date_start)
('2012-03-13 10:20:00' BETWEEN Date_start
AND Date_end
)
La condición 4 se verifica si:
Código MySQL:
Ver original('2012-03-13 09:00:00' <= Date_start)
('2012-03-13 10:20:00' >= Date_end)
En otras palabras, para cubrir todas las posibilidades necesitarías:
Código MySQL:
Ver original(('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
)) (('2012-03-13 09:00:00' BETWEEN Date_start
AND Date_end
) AND ('2012-03-13 10:20:00' >= Date_end
)) (('2012-03-13 09:00:00' <= Date_start
) AND ('2012-03-13 10:20:00' BETWEEN Date_start
AND Date_end
)) (('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...