Att kolla sedan om det finns något på Val 1 valt i databasen mot tiderna när det är hela timmar är inga problem. Men om det finns tid på Val 1 säg, 10.00-11.00 och man väljer Val 2 10.00-10.30 så ska inte det gå heller.
Hur bör man lösa detta?
man kan "boka" både hela timmar (9-10) och halva timmar (9-9.30 resp 9.30-10)
en "bokning" på 9-10 omöjliggör bokningar på de andra alternativen
Isåfall finns det fyra scenarier som måste unvikas:
* slutar efter att en annan bokning börjar men innan den slutar
* startar efter en annan bokning börjar, men innan de slutar
* börjar innan annan bokning slutar, men slutar efter
* börjar före och slutar efter annan bokning börjar/slutar
löses kodmässigt såhär (t.ex.)
SELECT * FROM db_bokning WHERE
$stoptid > db_starttid AND $stoptid <= db_stoptid OR
$starttid >= db_starttid AND $startid <= db_stoptid OR
$starttid <= db_starttid AND $stoptid >= db_stoptid
om du får en träff på denna sökning så är positionen upptagen.
Detta är bara ett sätt att lösa det. Ett annat är att plocka ut alla bokningar i en lista och göra ett likande test:
foreach ($array AS $v) {
$startt = strtotime($v['booking_starttime']);
$stopt = strtotime($v['booking_stoptime']);
if ( ( ($comp_startt >= $startt) AND ($comp_startt <= $stopt) ) OR
( ($comp_stopt >= $startt) AND ($comp_stopt <= $stopt) ) ) {
return "booked";
}
}
Okej. Det där funka ju fint med sql-satsen... Tack för det!
Okej. Ytterligare ett problem som dök upp när man satt å funderade lite...
Korrekta tider att boka på:
08.00-09.30, 10:30-12.00, 13.30-16.00
Sen har det dykt upp ett alternativ till. Men har möjligheten att välja +15 min extra på sin bokning.
Okej. Nu till problemet, vad händer om Kalle bokar 08.00-08.45 (om han har valt å lägga till de där 15 min), då kan ju inte nästa boka förän 09.00-09.30. Det innebär att det blir ledigt 15 min där mellan 08.45-09.00 som inte går att använda. Hur lösa så att det inte blir några glapp?