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'
)
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,