Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/03/2014, 18:13
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Asociar la disponibilidad de una habitación con un rango de fechas en sql

No.

Tu tabla puede ser algo asi:
desde | hasta | id_casa
2014-03-01 | 2014-03-03 | 1
2014-03-06 | 2014-03-09 | 2
2014-03-15 | 2014-03-20 | 1
2014-03-30 | 2014-04-05 | 2

si tu quieres saber, en que fechas esta reservada una casa, por ejemplo la casa 1, entonces usarias esta query:
Código MySQL:
Ver original
  1. SELECT fecha_desde, fecha_hasta FROM disponiblidad WHERE id_casa = 1;

esa query filtraria tu tabla dejando solo estos registros:
desde | hasta | id_casa
2014-03-01 | 2014-03-03 | 1
2014-03-15 | 2014-03-20 | 1

ahora bien, si tu quieres los registros que corresponden a reservas de cualquier casa en un rango de fechas, por ejemplo entre el 2014-03-02 y 2014-03-08 entonces usas esta query:
Código MySQL:
Ver original
  1. SELECT fecha_desde, fecha_hasta FROM disponibilidad WHERE
  2. (dia_entrada BETWEEN '2014-03-02' AND '2014-03-08') OR  
  3. (dia_salida BETWEEN '2014-03-02' AND '2014-03-08') OR
  4. (dia_entrada <= '2014-03-02'  AND dia_salida >= '2014-03-08');

esa query filtraria tu tabla dejando solo estos registros:
desde | hasta | id_casa
2014-03-01 | 2014-03-03 | 1
2014-03-06 | 2014-03-09 | 2

Ahora, tu quieres todos los registros que impide que se reserve una casa determinada en un rango de fechas.

Solo debes juntar las dos condiciones anteriores, y si seguimos con los datos del ejemplo quedaria asi:
Código MySQL:
Ver original
  1. SELECT casas FROM disponibilidad WHERE id_casa=1 AND (
  2. (dia_entrada BETWEEN '2014-03-02' AND '2014-03-08') OR  
  3. (dia_salida BETWEEN '2014-03-02' AND '2014-03-08') OR
  4. (dia_entrada <= '2014-03-02'  AND dia_salida >= '2014-03-08'));

esa query filtraria tu tabla dejando solo estos registros:
desde | hasta | id_casa
2014-03-01 | 2014-03-03 | 1

como veras, el "truco" esta en aprender a filtrar. Partes de un conjunto de resultados generico, que son todas las filas, luego, debes de a poco, ir filtrando segun condiciones, primero sacas de los resultados aquellos que no sean de la casa, luego a ese conjunto que te queda, le sacas los que no afectan a la reserva, los que te quedan, son aquellos que te interesa.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios