Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Select avanzado/complicado (para analizar)

Estas en el tema de Select avanzado/complicado (para analizar) en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/04/2007, 22:15
 
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires Argentina
Mensajes: 59
Antigüedad: 18 años, 7 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,
  #2 (permalink)  
Antiguo 19/04/2007, 14:30
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Select avanzado/complicado (para analizar)

hola, creo q' tenemos el mismo problema.
yo uso vfox per el select es lo mismo tengo registros que tienen fecha de inicio y fecha de fin y quiero seleccionar aquellos que entren en el rango pedido desdef hastaf el select es el siguiente
select....where (planes.fechaini <=m.fechad and planes.fechafin>=M.hastaf)
ej si el rango soli es m.fechad=01/04/07 m.fechah=10/04/07

regi inicio 31/03/07 fin 06/04/07 no lo toma por que
where (31/03/07 <=01/04/07 and 06/04/07 >=10/04/07
se cumple no se cumple
con and al no cumplir una lo rechaza al registro
Creo q es algo parecido a lo tuyo pero sy existe la solucion .
Espero q alguien nos de una mano
Gracias
  #3 (permalink)  
Antiguo 20/04/2007, 13:33
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 1 mes
Puntos: 37
Re: Select avanzado/complicado (para analizar)

primero necesitan checar que el formato de las fechas en todos los campos sea igual, luego simplemente con 2 beetwen, lo que vas a hacer es no solo evaluar que la fecha sea menor o mayor ya que se puede dar el caso de que la fecha caiga dentro o fuera del rango, asi lo que tienes que evaluar son intervalos.



suponiendo buscar reservaciones del 28/03/2007 al 31/04/2007

simplemente es
select * from departamentos
where departamentos.id_depto not in (

select id_depto from reservaciones where
(fecha_desde beetwen #03/28/2007# and #04/31/2007#)
and
(fecha_hasta beetwen #03/28/2007# and #04/31/2007#)

)
significa que nos va a dar las habitaciones que cumplan lo siguiente

que la el inicio y el final de la reservacion no se encuentre dentro de una reservacion previamente hecha.

bye

saludos
  #4 (permalink)  
Antiguo 25/04/2007, 21:51
 
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires Argentina
Mensajes: 59
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: Select avanzado/complicado (para analizar)

goteen_mx,

por algun motivo que desconosco cuando porbe utilizar los between no me habia funcionado como esperaba, luego de leer tu post volvi a rearmar el query y anduvieron jeje, seguro era algun error tonto, muchas gracias por tu ayuda.

la query final quedo asi


Código PHP:
select casa. *, barrios.sdesc from casabarrios 
where barrios
.id_barrio casa.barrio 
and casa.id_casa not in 
select r_id_casa from tbl_reservas 
where 
fechaDesde between '2007/04/04' and '2007/04/28'
or (
fechaHasta between '2007/04/04' and '2007/04/28'
or (
fechaDesde '2007/04/04' and fechaHasta '2007/04/28') )
and 
barrio 
and tipo_casa 
fijate que entre los 2 between iba un or, porque sino muchas propiedades no cumplian con ambos requerimientos entonces se terminaban mostrando, y tambien agregue otro or para el tercer caso... que es que la fecha de inicio sea mayor a la reservada y la fecha de termino sea menor.
saludos y gracias nuevamente. te debo una :)

ricardomed pudiste solucionar el problema con tu query?? si necesitas una mano postealo que lo vemos.
saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 18:03.