CitarCitar
SELECT * FROM Reservaciones WHERE entrada NOT BETWEEN '2010-01-07' AND '2010-03-20'
Pero con esto, solo miraría si el día 7 de enero y 3 de marzo está reservado, pero... y si da la casualidad que alguien reserva del 6 de enero al 8 de enero y del 18 de marzo al 25 de marzo?
Las evaluaciones BETWEEN indican un rango total o sea, si tu dices:
NOT BETWEEN '2010-01-03' AND '2010-01-20'
Esta condicion dice, que te retornara todos los registros que NO esten dentro de la fecha desde '2010-01-03' hasta '2010-01-20' Se evalua completo.. desde .. hasta. Ahora si en su lugar quieres saber cuales SI estan reservadas dentro de la fecha desde el dia 03 de Enero al 20 de Enero (Esto incluye todas las habitaciones reservadas a partir del dia 03,04,05,06,07...etc hasta el dia 20 de Enero) utilizarias entonces:
SELECT * FROM table WHERE entrada BETWEEN '2010-01-03' AND '2010-01-20'
En vez de NOT BETWEEN usas BETWEEN.
Si al contrario tu unicamente quieres conocer que habitaciones estan reservadas el dia 03 y dia 07 de Enero solamente esos 2 dias no los dias que estan entre ellos dos, usarias:
SELECT * FROM tabla WHERE entrada IN('2010-01-03','2010-01-07')
Ahora si tu quieres saber que habitaciones estan reservadas desde el dia 03 de Enero al 15 de Enero y desde el dia 5 de Marzo al 25 de Marzo.
SELECT * FROM tabla WHERE entrada BETWEEN '2010-01-03' AND '2010-01-15' AND '2010-03-05' AND '2010-01-25'
Ahora si tu solamente quieres saber las fechas de Reservacion de un cliente en especifico, ahi tu table Reservaciones debera crecer jejejejeje agregandole el campo cliente con su respectivo ID.
cuando postee esto.
con esto puedes crearte una tarea programada cada 24 horas que se ejecute 1 sola vez, asi mantendras actualizadas de forma automatica el campo 'faltan' para cada fecha ya reservada. Si usas un motor sin esta capacidad, tendrias que dar uso del Sistema Operativo y programar una tarea (un script) que se conecte cada 24 horas a la DB una sola vez y actualize dicho campo 'faltan'.
son 4 tablas.
habitacion Normal = A1,A2,A3, etc... habitacion Ultra = B1, B2, B3, etc... y podrias crear tu otra tabla de habitaciones Super con C1, C2, C3 como codigo de referencia
asi sabras diferenciar en la tabla padre de que habitaciones se esta hablando.
todo desfragmentado ahi, ocupara menos espacio de HD en un datafile, pero prefiero que me ocupe mas bytes de disco una data constante organizada en un motor no transaccional para data chiquita, que tener que cuidar espacio del disco en un motor no transaccional con una data desfragmentadora.