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