A veces, para ver con claridad, lo que te conviene es escribir un pseudocódigo que te sirva de guía. Algo como (aplicando por lógica inversa):
Cita: Para ser válido:
- Fecha de inicio y final no debe quedar comprendida dentro de otro registro.
- La fecha de inicio no debe quedar entre fecha de inicio y final de otro.
- La fecha final no debe quedar entre el inicio y final de otro.
- El período nuevo no debe superponerse al de otro período ya existente.
Si te fijas, la segunda y tercera condiciones ya incluyen a la primera, por lo que podemos descartar esa. Pero no podemos descartar la cuarta.
Entonces eso sería:
Código MySQL:
Ver original...
(fechainicionueva
<= fechainicio
AND fechafinalnueva
>= fechafinal
)
Me parece que con eso es suficiente.
En ese contexto, si la consults devuelve al menos un registro, entonces los datos que se quieren insertar no son válidos.