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

consultar disponibilidad de reservas

Estas en el tema de consultar disponibilidad de reservas en el foro de Bases de Datos General en Foros del Web. Hola, estoy haciendo un sistema para alquiler de inmuebles, en el cual tengo 2 tablas una para los inmuebles y otra para las reservas que ...
  #1 (permalink)  
Antiguo 02/12/2010, 16:27
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
consultar disponibilidad de reservas

Hola,
estoy haciendo un sistema para alquiler de inmuebles, en el cual tengo 2 tablas
una para los inmuebles y otra para las reservas que tiene los siguientes campos
res_id
res_inm_id
res_start_date
res_start_date
estado (que pueden ser 0=reservado, 1=bloqueado, 2=bajo consulta)

Bien ahora supongamos que quiero buscar todos los inmuebles del tipo 1 (id: 89,78,75,66) que no este reservados ni bloqueados entre el 02-12-2010 y el 08-12-2010 y en la tabla reserva tengo los inmuebles:
id 89 con una reserva del 31-11-2010 al 01-12-2010 estado 0
id 89 con una reserva del 03-12-1010 al 06-12-2010 estado 1
id 89 con una reserva del 08-12-2010 al 11-12-2010 estado 0
id 78 con una reserva del 03-12-2010 al 07-12-2010 estado 0
id 66 con una reserva del 03-12-2010 al 07-12-2010 estado 2

yo intento usar la siguiente query:
Código MySQL:
Ver original
  1. SELECT inm.*,p.name AS pais, t.tipo_nombre_es as tipo, s.name AS estado, c.name AS ciudad
  2. FROM mvr_inmuebles AS inm
  3. LEFT JOIN locations_countries AS p ON p.id=inm.inm_country
  4. LEFT JOIN locations_states AS s ON s.id=inm.inm_state
  5. LEFT JOIN locations_cities AS c ON c.id=inm.inm_city
  6. LEFT JOIN mvr_reservas AS r ON r.res_inm_id=inm.inm_id
  7. LEFT JOIN mvr_tipo AS t ON t.tipo_id=inm.inm_type
  8. AND inm_type='1'
  9. AND (inm.inm_id IN ( SELECT res_inm_id FROM mvr_reservas WHERE ( res_start_date BETWEEN '2010-12-02' AND '2010-12-08')
  10. OR (res_end_date BETWEEN '2010-12-02' AND '2010-12-08')
  11. OR (res_start_date < '2010-12-02' AND res_end_date > '2010-12-08')
  12. AND estado = 2 )
  13. OR inm.inm_id NOT IN ( SELECT res_inm_id FROM mvr_reservas WHERE ( res_start_date BETWEEN '2010-12-02' AND '2010-12-08')
  14.  OR (res_end_date BETWEEN '2010-12-02' AND '2010-12-08')
  15. OR (res_start_date < '2010-12-02' AND res_end_date > '2010-12-08') ) )
  16. AND inm_larga!='1'
  17. GROUP BY inm_id
  18. ORDER BY inm_price ASC
  19. LIMIT 0,6
esa query no me esta devolviendo correctamente los datos, ya que me devuelve los inmuebles 89 y 78 en vez de los inmuebles 66 y 75. Por lo que he notado esto me lo hace porque en el rango de fecha que le paso para buscar hay algunos dias por ejemplo 2 que estan "libres" pero el siguiente día no, y en vez de no devolverlo porque estaría reservado me la trae igual.
Ya nose como poder solucionarlo.
Espero que me puedan dar una mano.
Desde ya muchas gracias

Etiquetas: consultar, disponibilidad, reservas
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 08:22.