Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/04/2013, 05:35
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: 17 años, 2 meses
Puntos: 2658
Respuesta: Consulta sql y codigo php(Ayuda)

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:
Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE (inicioNuevaPromo BETWEEN inicioPromo AND finPromo)
  3.     OR (finNuevaPromo BETWEEN inicioPromo AND finPromo)
  4.     OR((inicioPromo BETWEEN inicioNuevaPromo AND finNuevaPromo) AND (finPromo BETWEEN inicioNuevaPromo AND finNuevaPromo))
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í:
Código MySQL:
Ver original
  1. SELECT COUNT(1) promos
  2. FROM tabla
  3. WHERE (inicioNuevaPromo BETWEEN inicioPromo AND finPromo)
  4.     OR (finNuevaPromo BETWEEN inicioPromo AND finPromo)
  5.     OR((inicioPromo BETWEEN inicioNuevaPromo AND finNuevaPromo) AND (finPromo BETWEEN inicioNuevaPromo AND finNuevaPromo))
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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)