login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Reserverings check mysql (Opgelost)

Offline weedtiger - 19/04/2011 10:54 (laatste wijziging 19/04/2011 10:56)
Avatar van weedtigerNieuw lid Een goeden dag mensen,

Als opdracht voor school moet ik dus een site maken voor een hotel waar mensen op kunnen reserveren. Ik zit nu alleen met een mysql probleempje.

De bedoeling is dat mensen een 2 datums kunnen selecteren, en door middel van die datums moet dus worden gechecked welke kamers vrij zijn, en deze zou die moeten weergeven momenteel heb ik dit:

http://img28.im...abased.png

  1. SELECT r.id, r.room, b.roomno, b.datefrom, b.dateto
  2. FROM rooms r, bookings b
  3. WHERE r.id = b.roomno
  4. AND '2011-04-19' NOT BETWEEN b.datefrom AND b.dateto
  5. AND '2011-04-20' NOT BETWEEN b.datefrom AND b.dateto


de datums die hier in staan zijn dus tijdelijk 

Ik heb dus het vermoeden dat ik niet goed bezig ben, en kom er ook niet echt uit.



hopelijk heb ik hierme genoeg info gegeven, mocht er meer nodig zijn dan zeg het me maar 

mvg, WT

4 antwoorden

Gesponsorde links
Offline ArieMedia - 19/04/2011 11:29 (laatste wijziging 19/04/2011 11:39)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Windesheim? 

Heb je toevallig ook een kleine dump waar je bijhoudt welke rooms bezet zijn?

-- Edit, als de afbeelding een voorbeeld is van je huidige query dan lijkt het me niet goed.. Je checked namelijk op welke personen er niet zijn tussen x en x, Als jantje op de 14e in kamer 8 zit, Pietje de 15e in kamer 8 en je de 16e checked, zal je waarschijnlijk al 2x kamer 8 terugkrijgen.

-- Edit2,

Als je in de rooms-tabel 2 velden erbij zet date_from en date_till, en in de gasten tabel het kamernummer opschrijft, kan je al snel zien welke bezet zijn. Ook kan je gemakkelijk zien welke gasten waar zijn. In de gastentabel krijg je een nummer terug (bijv kamer 8), aan de hand daarvan kan je kijken of die tussen bepaalde data liggen (maar dat is dus enkel als je wil weten welke kamer een gast NU heeft).
Offline weedtiger - 20/04/2011 09:20
Avatar van weedtiger Nieuw lid
ArieMedia schreef:
Windesheim? 

Heb je toevallig ook een kleine dump waar je bijhoudt welke rooms bezet zijn?

-- Edit, als de afbeelding een voorbeeld is van je huidige query dan lijkt het me niet goed.. Je checked namelijk op welke personen er niet zijn tussen x en x, Als jantje op de 14e in kamer 8 zit, Pietje de 15e in kamer 8 en je de 16e checked, zal je waarschijnlijk al 2x kamer 8 terugkrijgen.

-- Edit2,

Als je in de rooms-tabel 2 velden erbij zet date_from en date_till, en in de gasten tabel het kamernummer opschrijft, kan je al snel zien welke bezet zijn. Ook kan je gemakkelijk zien welke gasten waar zijn. In de gastentabel krijg je een nummer terug (bijv kamer 8), aan de hand daarvan kan je kijken of die tussen bepaalde data liggen (maar dat is dus enkel als je wil weten welke kamer een gast NU heeft).


de plaatjes zijn databases "bookings" en "rooms" die met kamer 1 2 3 4 5 6 heet dus rooms de ander is dus bookings
Offline MiST - 21/04/2011 13:37
Avatar van MiST Lid haal de ID's op van de kamers die bezet zijn tussen datum 1 en datum 2

  1. -- gereserveerde kamers, niet vrij
  2. SELECT room_id FROM reservatietabel
  3. WHERE reservatietabel.stopdatum > startdatum
  4. AND reservatietabel.startdatum < stopdatum


zo heb je alle gereserveerde kamers. ff illustreren.

  1. startdatum stopdatum
  2. |--------------------| -> gevraagde periode
  3. |--------------------------------------------| -> overlappende reservatie
  4. |----------| -> half over linkergrens
  5. |------------| -> half over rechtergrens
  6. |------------| -> niet volledige bezetting in het interval
  7. |-----| -> reservatie buiten het interval


De reservatie buiten het interval wordt dus niet geselecteerd want reservatie.start > stop

Indien je start en stop datum wil doen overlappen op de dag zelf (bijvoorbeeld als mensen moeten uitchecken voor 12 uur en pas hun kamer kunnen betrekken vanaf 16u) kan je nog spelen met >, <, <=, >=

Daarna selecteer je gwn alle kamers waarvan id NIET tot die set behoort

  1. SELECT * FROM kamers
  2. WHERE id NOT IN
  3. (
  4. SELECT room_id FROM reservatietabel
  5. WHERE reservatietabel.stopdatum > startdatum
  6. AND reservatietabel.startdatum < stopdatum
  7. )


Je kan ook de eerste query inverteren (en dus de kamerid's ophalen die vrij zijn) en die dan JOINen aan de kamers. Da's wellicht een beter idee in termen van performance.
Bedankt door: weedtiger
Offline weedtiger - 27/04/2011 13:07
Avatar van weedtiger Nieuw lid @ MiST

heb er dit nu van gemaakt:
SELECT * FROM rooms
WHERE id NOT IN
(
SELECT roomno FROM bookings
WHERE bookings.dateto > datefrom
AND bookings.datefrom < dateto
)

Daar was ik naar op zoek.
Het werk, super bedankt!!   
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.163s