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

Busqueda SQL complicada

Estas en el tema de Busqueda SQL complicada en el foro de Mysql en Foros del Web. Hola amigos!! Tengo el siguiente problema en MYSQL que no se como resolver, espero alguien me de algo de luz. El tema es asi. Tengo ...
  #1 (permalink)  
Antiguo 01/08/2007, 18:48
Avatar de elwolos  
Fecha de Ingreso: febrero-2004
Ubicación: Argentina
Mensajes: 251
Antigüedad: 20 años, 2 meses
Puntos: 0
Pregunta Busqueda SQL complicada

Hola amigos!!
Tengo el siguiente problema en MYSQL que no se como resolver, espero alguien me de algo de luz.
El tema es asi.
Tengo alquileres que se reservan en varios periodos.
por ejemplo una casa reservada del 10 al 15 de febrero y del 1 al 10 de marzo.
La busqueda que quiero hacer, es por ejemplo:
que me de las casas que no estan reservadas del 20 al 25 de febrero

Lo plantee como una tabla propiedad, con sus caracteristicas y otra tabla reserva con el codigo de la propiedad y las fechas de enrada y salida.
ejemplo de las tablas

Propiedad
---------
cod_prop
direccion
nro
detalle
etc....

Reserva
---------
cod_reserva
cod_prop
fecha_in
fecha_out


entonces en la tabla reserva puede ir la misma propiedad varias veces con distintos periodos de reserva.

Alguien puede ayudarme con la sentencia SQL???? estoy muerto...
o tal vez a alguien se le ocurre otro planteo...
desde ya les agradezco profundamente
__________________
W:-DL
...estas cosas pasan una sola vez en la vida... capaz dos.
Diseño Web - Desarrollo Web
  #2 (permalink)  
Antiguo 02/08/2007, 02:07
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Busqueda SQL complicada

Buenas, hombre SQL complicada....


select p.*
from propiedad p
join reserva r on r.cod_reserva = p.cod_reserva
where "fecha_inicio_libre" not between r.fecha_in and r.fecha_out (1)
and "fecha_fin_libre" not between r.fecha_in and r.fecha_out (2)
and r.fecha_in not between "fecha_inicio_libre" and "fecha_fin_libre" (3)

"fecha_inicio_libre" en tu ejemplo sería 20 de febrero
"fecha_fin_libre" en tu ejemplo seria 25 de febrero
(1) comprueba que no este ocupado el inicio de las "vacaciones"
(2) comprueba que no este ocupado el fin de las "vacaciones"
(3) comprueba que no este ocupado durante el periodo de "vacaciones"; siguiendo tu ejemplo que no este ocupada la propiedad el dia 22 de febrero

Un saludo
  #3 (permalink)  
Antiguo 02/08/2007, 15:59
Avatar de elwolos  
Fecha de Ingreso: febrero-2004
Ubicación: Argentina
Mensajes: 251
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Busqueda SQL complicada

Gracias Seyko, pero tal vez no me explique bien...
En la tabla reserva se guardan los periodos de reserva de las propiedades, pero una propiedad puede tener muchas reservas.
con el codigo que me pasaste siempre me tira todas las propiedades.
Por eso digo que tal vez podria ser otro planteo...
nose vay mal...

Gracias!
__________________
W:-DL
...estas cosas pasan una sola vez en la vida... capaz dos.
Diseño Web - Desarrollo Web
  #4 (permalink)  
Antiguo 02/08/2007, 19:38
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: Busqueda SQL complicada

Hola ElWolos, creo que esto te puede ayudar

Tus Tablas Son:

Propiedad
---------
cod_prop
direccion
nro
detalle
etc....

Reserva
---------
cod_reserva
cod_prop
fecha_in
fecha_out

Código:
SELECT *
FROM Propiedad P
WHERE NOT EXISTS(
    SELECT 1
    FROM Reserva R
    WHERE R.Cod_Prop = P.Cod_Prop
        AND (20070220 BETWEEN R.Fecha_In AND R.Fecha_Out)
        AND (20070225 BETWEEN R.Fecha_In AND R.Fecha_Out)
)
Creo que ayuda... si no me avisas pa castigarlo.... :p

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #5 (permalink)  
Antiguo 03/08/2007, 02:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Busqueda SQL complicada

Cita:
Iniciado por elwolos Ver Mensaje
Gracias Seyko, pero tal vez no me explique bien...
En la tabla reserva se guardan los periodos de reserva de las propiedades, pero una propiedad puede tener muchas reservas.
con el codigo que me pasaste siempre me tira todas las propiedades.
Por eso digo que tal vez podria ser otro planteo...
nose vay mal...

Gracias!
me equivoque en el join
join reserva r on r.cod_reserva = p.cod_reserva
el correcto seria:
join reserva r on r.cod_propiedad = p.cod_propiedad
  #6 (permalink)  
Antiguo 03/08/2007, 02:15
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Busqueda SQL complicada

Cita:
Iniciado por Gabo77 Ver Mensaje
Hola ElWolos, creo que esto te puede ayudar

Tus Tablas Son:

Propiedad
---------
cod_prop
direccion
nro
detalle
etc....

Reserva
---------
cod_reserva
cod_prop
fecha_in
fecha_out

Código:
SELECT *
FROM Propiedad P
WHERE NOT EXISTS(
    SELECT 1
    FROM Reserva R
    WHERE R.Cod_Prop = P.Cod_Prop
        AND (20070220 BETWEEN R.Fecha_In AND R.Fecha_Out)
        AND (20070225 BETWEEN R.Fecha_In AND R.Fecha_Out)
)
Creo que ayuda... si no me avisas pa castigarlo.... :p

Saludos!
Buenas,
Primero para que hacer una subconsulta si se puede hacer con un join.
Esta select no cubre el punto (3) de mi primer post.

Un saludo
  #7 (permalink)  
Antiguo 03/08/2007, 08:10
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: Busqueda SQL complicada

Por que el Join es mas pesado que un Exists... si lo que quieres es solo mostrar las propiedades y no sus reservas, ¿para que mezclar el contenido de la tabla Reserva si no la quieres mostrar?..... simple optimización de recursos

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #8 (permalink)  
Antiguo 05/08/2007, 08:17
Avatar de elwolos  
Fecha de Ingreso: febrero-2004
Ubicación: Argentina
Mensajes: 251
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Busqueda SQL complicada

Excelente!!!
Gracias Gabo!!! funcionó sin chistar!! No se mucho SQL y no conocia esa sentencia de EXISTS. Gracias!!
Seyko Gracias tambien!! hice el arreglo antes de que me lo dijeras, pero no funciono, siempre me tiraba todas las propiedades.

Muchisimas Gracias por su tiempo!!!

Un saludo y un abrazo!!!
__________________
W:-DL
...estas cosas pasan una sola vez en la vida... capaz dos.
Diseño Web - Desarrollo Web
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:59.