sql >> Database >  >> RDS >> Mysql

MySQL vind eerst beschikbare weekend

Ik denk dat de anderen de vraag over het hoofd zien... Ze denken dat je tafel misschien al VOLTOOID is met alle weekenden en enige status om te openen of niet... Mijn gok is dat je tafel alleen een record HEEFT ALS deze is gereserveerd... dus je moet records vinden die HELEMAAL NIET BESTAAN... op basis van een aantal geautomatiseerde zoekdatums...

Dit is een wijziging van een ander bericht dat ik heb gedaan hier

Hoewel ik de context van de query niet heb gewijzigd, heb ik alleen de kolommen toegevoegd die aan JOUW tabel zijn gekoppeld. Ik begrijp dat je alleen tegen een enkele zaaltafel ingaat en ik ook (eigenlijk). Echter, om de "JustDates" alias te begrijpen, creëert deze INNERLIJKE PRE-QUERY een dynamisch gevulde tabel van ALLE DATA door een Cartesiaanse join uit te voeren tegen ELKE andere tabel... in dit geval, uw "Plaats" reserveringstabel (ik heb niet t zie uw werkelijke tabelnaamverwijzing expliciet, dus u zult dat moeten veranderen). Dit creëert dus in wezen een tabel met alle datums vanaf wat "vandaag" ook is en gaat 30 dagen vooruit (via limiet), maar kan 40, 50, 300 zijn of zoveel als je nodig hebt.. mits de "YourVenueTable" heeft minstens zoveel records als dagen waarop u wilt testen. (dezelfde verduidelijking in de post waaruit dit is afgeleid). Deze resultaatset die 30, 40 of hoeveel dagen dan ook uitgaat, is voorgefilterd voor ALLEEN de gegeven dag van de week van 1-zondag of 7-zaterdag... Dus het zou een resultatenset moeten retourneren van alleen 23 april, 24 april, april 30, 1 mei, 7 mei, 8 mei, 14 mei, 15 mei, 21 mei, 28 mei, enz.

Dus NU heb je een dynamisch gecreëerde resultatenset van alle mogelijke dagen die je overweegt vooruit te gaan. Dat wordt nu toegevoegd aan uw werkelijke locatiereserveringstabel en wordt gefilterd om ALLEEN die DATA te retourneren waar het NIET wordt gevonden voor de id_venue waar u zich zorgen over maakt. In uw gegevensvoorbeeld ZOU het een overeenkomst vinden op 23 en 24 april en die records NIET retourneren. Hetzelfde met 30 april... Het ZAL echter ontdekken dat het record in de prekwalificatielijst met 1 mei NIET de datumovereenkomst in de locatietabel zal vinden en dus dat zal opnemen zoals u aan het anticiperen bent... Het zal dan doorgaan met overslaan 7 en 8 mei, dan terug 14, 15, 21, 28 mei, enz...

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

Let op, en volgens de andere boekingen, kan de vraag naar beschikbaarheidsdatums van de reserveringsdatum met een limiet van 30 hierboven ELKE tabel in het systeem zijn, zolang het TENMINSTE zoveel vrije dagen heeft als u wilt voor reserveringen. Als u alle beschikbaarheid voor een komend jaar wilt, wilt u 365 records in de tabel die worden gebruikt voor een Cartesiaans resultaat om de @r door dynamisch gemaakte "datum" -records te laten fietsen.



  1. Hoe te testen op een leeg SQL-resultaat in ASP

  2. Hoe te sorteren op vorige datum in de database?

  3. Selecteer zonder FROM maar met meer dan één rij

  4. Hoe maak je een TRIGGER in SEQUELIZE (nodeJS)?