sql >> Database teknologi >  >> RDS >> Mysql

Find gratis slots i et bookingsystem

Sandsynligvis overkill for din ansøgning - men:

En forholdsvis enkel måde at forbedre dine søgninger på på bekostning af at gøre 'skrive'-processen mere kompliceret, ville være at ændre reservationstabellen til at gøre den til en 'Tilgængelighed'-tabel.

Tilføj i en boolesk kolonne for at angive, om pladsen er ledig eller booket (eller endnu bedre indtast id'et for den kunde, der har reserveret den, og brug 0, hvis pladsen er ledig).

Start med en enkelt gratis plads, 1. jan 2009 -> 31. december 20?

Når du får en reservation, opdeler du den gratis plads i 3 (to indstik og en opdatering), den reserverede plads og de to tilgængelige pladser.

Bliv ved med det, og efterhånden som tidsrammen bliver mere fragmenteret, vil reservationsprocessen bestå af en af ​​følgende:

  • Tildeling af en hel 'tilgængelig plads' til nogen (én opdatering)
  • Opdeling af en "tilgængelig plads" i to (en opdatering og en indsættelse)
  • Opdeling af en plads i 3 (som ovenfor), hvis nogen booker den midterste sektion ud af en ledig plads.

Det er ikke utroligt kompliceret at administrere, og søgeprocessen bliver en simpel forespørgsel:at finde ledige pladser inden for den påkrævede tidsramme (booked=false eller customerid=0, uanset hvilken vej du går med det) hvor slutdato - startdato>=nummeret antal dage, du ønsker.

Det fordobler størrelsen af ​​booking-/tilgængelighedstabellen og gør bookinger mindre enkle, men afvejningen er, at søgeprocessen er omtrent så nem, som den bliver.



  1. Vælg flere id'er fra en tabel

  2. MySQL-streng sidste indeks af

  3. Hvordan bruger man MAX() på et underforespørgselsresultat?

  4. SQL Returnerer 1,0 i ny variabel baseret på tilfælde, når sætningen henviser til flere andre variabler