Saludos amigos foreros, ando necesitando una mano o sugerencia
tal vez la consulta no sea tan complicada, pero a mi me esta dando bastante trabajo y me resulta bastante engañosa , (no soy experto en sql)
voy a detallar lo mejor y mas simplemente posible el escenario.
estamos hablando del desarrolo de un portal que maneja reservas/estadías en departamentos.
en si el sistema maneja barrios, clientes, departamentos,reservas, etc.. pero para mantener las cosas simples voy a plantear a modo de ejemplo 2 tablas una que guarda los departamentos... y otra que guarda las reservas a esos departamentos, esto es MySQL tablas de tipo myisam.
entonces tenemos por un lado la tabla que guarda los departamentos.. con campos como id_depto, habitaciones, descripcion, precioMensual, etc.
y por otro lado la tabla reservas que devuelve algo asi
select * from tbl_reservas
id_reserva (INT - PK) id_prop (INT - FK) fechaDesde ( DATE) fechaHasta (DATE)
1 --------------------5----------------2007/03/01 ------------2007/03/22
2 --------------------17 --------------2007/03/15 ------------2007/04/10
3 --------------------9 ---------------2007/03/25 ------------2007/04/25
en si esta tabla tambien guarda un fk con el id_cliente y otras cosas mas, pero la voy a mantener simple. todo esto anda perfecto... ahora bien el problema surge en el desarrollo de el buscador de propiedades disponibles... es decir el sitio tiene un buscador con 2 campos
para que el visitante ponga, busco propiedades disponibles entre:
desde 15 abril 2007 , hasta el 30 mayo 2007.
entonces hasta ahora se me ocurrio algo asi
Código PHP:
select * from departamentos
where departamentos.id_depto not in
( select reservas.id_prop from reservas
where reservas.id_prop = departamentos.id_depto
and reservas.fechaDesde > '2007/03/16'
and reservas.fechaHasta < '2007/05/18'
)
basicamente el query joinea departamentos con reservas y muestra solo los departamentos que no devuelvan resultado, es decir que no esten reservados en esa fecha.
esto funciona bien pero solo en los casos en que la fecha de inicio es mayor a la fecha desde que selecciono el navegante y menor a la fecha hasta que selecciono.
es decir la query de arriba muestra en pantalla los departamentos id 5 y 17 como disponibles, cuando esto en realidad no es asi.
bueno lo que me gustaría es que alguien con mas conocimiento o experiencia me oriente un poco en como puedo manejar esto, tal vez agregar mas and o or , u utilizar between ( aunque lo estuve probando y no me dio muy buenos resultados trabajando con las fechas) o tal vez otra forma de manejar o almacenar las reservas.
cualquier sugerencia sera bienvenida
Saludos,