Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/05/2008, 10:41
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: calcular fechas ocupadas entre 2 fechas

No se si te servirá:

he hecho el planteaminto distinto con los mismos datos

THabitaciones
Habitacion
....

Contiene todas la habitaciones


TReservas
Habitacion
fechadesde
fechahasta
....

continen todas la reservas

Necesitaremos una consulta con una subconsulta para obtener las habitaciones libres en un periodo dado

Si tenemos

$fechainicial
$fechafinal

variables con las fechas inicial y final que se pretenden reservar (periodo buscado).


Subconsulta para obtener la habitacion de las reservas involucradas en el periodo buscado:



Código:
SELECT DISTINCT TReservas.habitacion, 
             FROM TReservas
WHERE (TReservas.fechadesde<=$fechainicial 
             AND TReservas.fechahasta>$fechainicial) <--r. $fechainicial ocupada
     OR (TReservas.fechadesde<=$fechafinal 
            AND TReservas.fechahasta>$fechafinal) <--r. $fechafinal ocupada
     OR (TReservas.fechadesde>$fechainicial 
            AND TReservas.fechahasta)<$fechafinal);<--r. cuyas fechas estan dentro del periodo buscado 
si la consulta anterior nos da las habitaciones que tienen algun dia ocupado del periodo buscado luego es facil obtener las que no tinen ningun dia ocupado es decir que estan libres en el periodo buscado:


Código:
SELECT THabitaciones.Habitacion
FROM THabitaciones
WHERE THabitaciones.Habitacion Not In 
      (SELECT DISTINCT TReservas.habitacion, 
      FROM TReservas
      WHERE (TReservas.fechadesde<=$fechainicial 
         AND TReservas.fechahasta>$fechainicial) <--r. $fechainicial ocupada
      OR (TReservas.fechadesde<=$fechafinal 
         AND TReservas.fechahasta>$fechafinal) <--r. $fechafinal ocupada
      OR (TReservas.fechadesde>$fechainicial 
            AND TReservas.fechahasta)<$fechafinal));<--r. cuyas fechas estan dentro del periodo buscado 
Con programación habria muchas otras forma de hacerlo pero con sql puro solo se me ocurre esta, se que no es exàctamente lo que querias pero con esta informacion podrias hacer la reserva.

Quim