Este tema es en realidad para el Foro de MySQL, no el de PHP, ya que tu problema no es de programación.
De todos modos, a nivel de SQL la solución es de una extrema simplicidad, aunque a veces resulta algo confuso. Te lo planteo así:
Si un clioente ingresa una nueva oferta, tal que no debe solaparse con otras, ese solapamiento puede darse:
1) El inicio cae entre inicio final de otra.
2) El final cae entre inicio y final de otra.
3) Empieza antes y termina después de otra.
Si te fijas, tienes tres condiciones distintas que no se pueden integrar en una única consulta, por tanto las tres condiciones deben ser consultadas. Como son interexcluyentes (un criterio niega el otro), so tres criterios opcionales y corresponde consultar por OR y no por AND.
En resumen, para obtener aquellas que se solapan, sería:
Esa consulta considera las tres condiciones.
Atención: Los paréntesis son críticos para la tercera condición. No se pueden suprimir.
Personalmente, para una validación simple, yo la haría así:
Si el result de la consulta devuelve un valor mayor a cero, entonces esa nueva promoción se está solapando con alguna, en caso de devolver cero, la puedes insertar.