sql >> Base de Datos >  >> RDS >> Mysql

MySQL encuentra el primer fin de semana disponible

Creo que a los demás les falta la pregunta... Piensan que su mesa ya puede estar poblada con todos los fines de semana y algún estado en cuanto a abrir o no... Supongo que su mesa solo TIENE un registro SI está reservada... por lo tanto, necesita encontrar registros que NO EXISTEN EN ABSOLUTO... en función de algunas fechas de búsqueda automatizadas...

Esta es una modificación a otra publicación que hice aquí

Aunque no cambié el contexto de la consulta, solo puse las columnas asociadas a TU tabla. Entiendo que solo va contra una mesa de un solo lugar y yo también (en realidad). Sin embargo, para entender el alias "JustDates", esta CONSULTA PREVIA INTERNA está creando una tabla dinámicamente poblada de TODAS LAS FECHAS haciendo una unión cartesiana con CUALQUIER otra tabla... en este caso, su tabla de reservas "Lugar" (no t ver su referencia de nombre de tabla real explícitamente, por lo que tendrá que cambiar eso). Entonces, en esencia, esto crea una tabla de todas las fechas a partir de lo que sea "hoy" y avanza durante 30 días (a través del límite), pero podría ser 40, 50, 300 o tantas como necesite... siempre que "YourVenueTable" tiene al menos tantos registros como días desea realizar la prueba. (La misma aclaración en la publicación de la que se derivó). Este conjunto de resultados que sale 30, 40 o la cantidad de días se filtra previamente SOLO para el día de la semana dado de 1-Domingo o 7-Sábado... Por lo tanto, debería devolver un conjunto de resultados de solo 23 de abril, 24 de abril, 24 de abril 30, 1 de mayo, 7 de mayo, 8 de mayo, 14 de mayo, 15 de mayo, 21 de mayo, 28 de mayo, etc.

Así que AHORA tiene un conjunto de resultados creado dinámicamente de todos los días posibles en los que está considerando avanzar. Ahora, eso se une a su tabla de reservas de lugares y se filtra para devolver SÓLO las FECHAS en las que NO se encuentra para el id_lugar que le preocupa. En su ejemplo de datos, ENCONTRARÍA una coincidencia el 23 y 24 de abril y NO devolvería esos registros. Lo mismo con el 30 de abril... Sin embargo, ENCONTRARÁ que el registro en la lista de precalificación que incluye el 1 de mayo NO encontrará la fecha del partido en la tabla de sedes y, por lo tanto, la incluirá como usted está anticipando... Luego continuará omitiendo 7 y 8 de mayo, luego regreso 14, 15, 21, 28 de mayo, etc...

select JustDates.OpenDate
  from 
      ( select
         @r:= date_add( @r, interval 1 day ) OpenDate
      from
         ( select @r := current_date() ) vars,
         Venue 
      LIMIT 30 ) JustDates
   where
      DAYOFWEEK( JustDates.OpenDate ) IN ( 1, 7 )
      AND JustDates.OpenDate NOT IN
          ( select Venue.date
                from Venue
                where Venue.id_venue = IDYouAreInterestedIn
                  and Venue.Date = JustDates.OpenDate )
    order by 
       JustDates.OpenDate

Tenga en cuenta, y según la publicación de otras reservas, la consulta de fechas de disponibilidad de fechas de reserva con un límite de 30 arriba puede ser CUALQUIER tabla en el sistema siempre que tenga AL MENOS tantos días como desee para las reservas. Si desea toda la disponibilidad para el próximo año, querrá que se utilicen 365 registros en la tabla para un resultado cartesiano para obtener el ciclo @r a través de los registros de "fecha" creados dinámicamente.