Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/03/2014, 18:26
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: Asociar la disponibilidad de una habitación con un rango de fechas en sql

Voy a intentar hacer un resumen de este tema, sobre la base de la última consulta propuesta por @NSD.
Como bien te dice, para evitar que salgan las propiedades que estarán ocupadas durante un periodo de tiempo, tienes que filtrar con tres condiciones, si o si:
1) Fecha inicial buscada no debe estar entre el inicio y fin de una locación ya pactada.
2) Fecha final buscada no debe estar entre inicio y fin de una locación pactada.
3) El período de la vigencia de ninguna locación quedar contenido dentro del período buscado.

Personalmente, prefiero escribirla así:
Código MySQL:
Ver original
  1. SELECT casas FROM disponibilidad
  2. WHERE id_casa=1
  3.     AND
  4.     ('2014-03-02'  BETWEEN dia_entrada AND dia_salida
  5.     OR
  6.     '2014-03-08'  BETWEEN dia_entrada AND dia_salida
  7.     OR
  8.     (dia_entrada <= '2014-03-02'  AND dia_salida >= '2014-03-08'));
SI a esto le agregas un índice en la tabla DISPONIBILIDAD sobre el par (dia_entrada, dia_salida), tendrás una buena optimización
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)