Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/03/2016, 11:41
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: BETWEEN al revés

Es un caso de manual, cuesta a veces entenderlo entero, pero estás cerca.
Para validar que algo que posee un rango no cae en el rango de otro registro se debe cumplir que:
- La fecha de inicio o de fin del nuevo rango no caiga dentro de un rango preexistente.
- El rango nuevo no debe solapar completamente a un rango registrado.

Esto devolvería las que se solapan:
Código MySQL:
Ver original
  1. SELECT id FROM reserva
  2.     $fechaingreso BETWEEN fechain AND fechaout
  3.     OR $fechasalida BETWEEN fechain AND fechaout
  4.     OR ($fechaingreso <= fechain  AND $fechasalida >= fechaout

Esto devolvería 0 si se cumple que el periodo está libre:
Código MySQL:
Ver original
  1. SELECT COUNT(*) solapadas
  2. FROM reserva
  3.     $fechaingreso BETWEEN fechain AND fechaout
  4.     OR $fechasalida BETWEEN fechain AND fechaout
  5.     OR ($fechaingreso <= fechain  AND $fechasalida >= fechaout
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)