Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/12/2011, 07:05
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Sistema de reserva

Se ha preguntado muchas veces, no me he puesto nunca a resolverlo... a ver si lo conseguimos...

Vamos por partes

supongo que tienes un identificador de cabaña (digamos idCabaña) unico sobre todos los complejos....

Código MySQL:
Ver original
  1. SELECT idCabania
  2. FROM cabanias
  3. WHERE fecha_inicio<='$fecha1' AND fecha_final>='$fecha1'

Estas no interesan ya que como minimo la primera fecha esta ocupada....

Código MySQL:
Ver original
  1. SELECT idCabania
  2. FROM cabanias
  3. WHERE fecha_inicio<='$fecha2' AND fecha_final>='$fecha2'

Estas tampoco por que como minimo la ultima esta ocupada

Código MySQL:
Ver original
  1. SELECT idCabania
  2. FROM cabanias
  3. WHERE fecha_inicio>='$fecha1' AND fecha_final<='$fecha2'

Estas tampoco porque tienen algun periodo ocupado entre $fecha1 y $fecha2

Código MySQL:
Ver original
  1. SELECT idCabania
  2. FROM cabanias
  3. WHERE fecha_inicio<='$fecha1' AND fecha_final>='$fecha1'
  4. SELECT idCabania
  5. FROM cabanias
  6. WHERE fecha_inicio<='$fecha2' AND fecha_final>='$fecha2'
  7. SELECT idCabania
  8. FROM cabanias
  9. WHERE fecha_inicio>='$fecha1' AND fecha_final<='$fecha2'

Un UNION DISTINCT de todo lo anterior nos da una lista sin repeticiones de las cabañas que no nos interesan...

Luego

Código MySQL:
Ver original
  1. FROM cabanias,complejos
  2. WHERE idCabania NOT IN (SELECT idCabania
  3. FROM cabanias
  4. WHERE fecha_inicio<='$fecha1' AND fecha_final>='$fecha1'
  5. SELECT idCabania
  6. FROM cabanias
  7. WHERE fecha_inicio<='$fecha2' AND fecha_final>='$fecha2'
  8. SELECT idCabania
  9. FROM cabanias
  10. WHERE fecha_inicio>='$fecha1' AND fecha_final<='$fecha2')

Nos da el conjunto complementario al anterior... es decir las cabañas libres...

Creo.... he empezado diciendo que se ha preguntado muchas veces como no lo necesitaba no he leido nunca las respuesta quizas hay alguna mejor... e incluso quizas esta falla....

No acabo de ver tu diseño... creo que deberias tener tres tablas

Cabanias
idCabania
idComplejo
....otros datos de la cabaña

Complejos
idComplejo
... otros datos del Complejo

Reservas
idReserva
idCabania
fecha_inicio
fecha_final
.... otros datos de la reserva

Por no hablar de la tabla Clientes....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 23/12/2011 a las 07:18