Consulta SQL (Reserva de mesas)

Publicado en 'Programación' por BrunoPower, 28 Mar 2013.





  1. BrunoPower

    BrunoPower Miembro nuevo

    Registro:
    14 Mar 2013
    Mensajes:
    4
    Likes:
    1




    Hola, tengo una idea de una consulta pero no sé como plantearla...

    Va así:
    Un Restaurant cuenta con 10 mesas, por día se puede realizar un máximo de 20 reservas (dado que cada mesa puede ser reservada 2 veces por día: tarde y noche), ahora, ¿cómo puedo saber qué días están a full, es decir, que ya no se puede hacer reserva ya que las mesas estarán ocupadas todo el día?, teniendo en cuenta el rango de fecha del 01 al 30 de cada mes. Por ejemplo, ¿cómo saber qué días están a full entre el 01/04 hasta 30/04?, ojo que quiero obtener sólo las fechas sin reserva disponible.

    Tablas:

    RESERVA
    Id_Reserva
    Id_Cliente
    Id_Mesa
    Fecha
    Hora


    MESA
    Id_Mesa
    Tipo


    Gracias de antemano. :hi:
     
    A MrMojoRisin le gustó este mensaje.


  2. kaloja

    kaloja Miembro frecuente

    Registro:
    28 Ago 2012
    Mensajes:
    177
    Likes:
    35
    Yo creo que deberías crear otro atributo a la tabla RESERVA, un atributo llamado estado y en este asignar "reservado, libre"
     
    A MrMojoRisin y xavi116 les gustó este mensaje.
  3. xavi116

    xavi116 Miembro de bronce

    Registro:
    4 Mar 2010
    Mensajes:
    2,114
    Likes:
    466
    efectivamente . agrega un estado a la mesa, yo tube que hacer algo similar con un sistema para una empreza de transporte que me dejaron como proyecto, pero en mi caso era en un formulario con .net recrear con 40 botones los asientos de un bus con 3 estados, ocupado(rojo), reservado(verde), disponible(gris), estube 2 horas pensando y buscando alguna forma de hacerlo hasta que agrege el atributo estado, luego asocie el estado a un color , luego con una funcion hize un recorrido a cada bus, luego dependiendo de cada bus un recorrido a todos los asientos y lo logre , no se como lo hize pero al final me salio perfecto
     
    A MrMojoRisin le gustó este mensaje.
  4. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. La idea consiste en contar las mesas reservadas agrupadas por fechas y a esto aplicar una condición (con having) que filtre aquellas fechas en las que este conteo sea igual al total de mesas existentes (tabla MESA) multiplicado por 2.

    Código:
    SELECT
      FECHA,
      COUNT(IDMESA) AS TOTAL_RESERVAS
    FROM RESERVA
    GROUP BY FECHA
    HAVING COUNT(IDMESA) = (SELECT COUNT(IDMESA) * 2 FROM MESA)
    ORDER BY FECHA ASC
    
    Un saludo

    Había olvidado la condición de las fechas. Agrego
    Código:
    SELECT
      FECHA,
      COUNT(IDMESA) AS TOTAL_RESERVAS
    FROM RESERVA
    GROUP BY FECHA
    HAVING COUNT(IDMESA) = (SELECT COUNT(IDMESA) * 2 FROM MESA) AND
           FECHA BETWEEN FECHA_INICIO AND FECHA_FIN
    ORDER BY FECHA ASC
     
    A shifted y MrMojoRisin les gustó este mensaje.
  5. omnicaos

    omnicaos Suspendido

    Registro:
    19 Jul 2012
    Mensajes:
    640
    Likes:
    85
    baneen a ese tipo
     
    A MrMojoRisin le gustó este mensaje.
  6. omnicaos

    omnicaos Suspendido

    Registro:
    19 Jul 2012
    Mensajes:
    640
    Likes:
    85
    resentido detected
     
  7. omnicaos

    omnicaos Suspendido

    Registro:
    19 Jul 2012
    Mensajes:
    640
    Likes:
    85
    tmr llegue al tope de respuestas directas , ya no me deja
     
    A MrMojoRisin le gustó este mensaje.
  8. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Mejor aún, se podría mover la condición de fechas dentro de un where.
    Código:
    SELECT
    FECHA,
    COUNT (IDMESA) AS TOTAL_RESERVAS
    FROM RESERVA
    WHERE FECHA BETWEEN FECHA_INICIO AND FECHA_FIN
    GROUP BY FECHA
    HAVING COUNT(IDMESA) = (SELECT COUNT(IDMESA) * 2 FROM MESA)
           
          
    
     
  9. BrunoPower

    BrunoPower Miembro nuevo

    Registro:
    14 Mar 2013
    Mensajes:
    4
    Likes:
    1
    Muchísimas gracias, me ha funcionado muy bien y puedo continuar, no podía avanzar sin eso :).