Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/04/2007, 22:15
debian4tw
 
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires Argentina
Mensajes: 59
Antigüedad: 19 años, 3 meses
Puntos: 1
Select avanzado/complicado (para analizar)

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,