Reserveringsysteem beschikbaarheid controleren

Status
Niet open voor verdere reacties.

thijsje123

Gebruiker
Lid geworden
30 apr 2002
Berichten
148
Ik ben een reserveringsysteem aan het maken voor een camping. Om het even duidelijk te maken:

Ik heb een aantal tabellen:

PLAATSEN
plaats_id
plaats_naam
plaats_omschrijving

KLANTEN
klant_id
klant_naam
klant_adres
klant_etc

RESERVERINGEN
reservering_id
plaats_id
klant_id
begindatum
einddatum

Verder zijn er nog wel wat attributen maar die zijn nu even niet belangrijk.
Ik weet bijna zeker dat deze opzet goed is. Ik heb voor de vorm een aantal plaatsen, klanten en reserveringen aangemaakt.

De volgende stap is nu: kijken of er plaats is. Het is de bedoeling dat er straks een gast gaat kijken en die selecteerd hoe lang hij zou willen blijven: aankomstdatum en vertrekdatum. Waarna de gast dit ingevoerd heeft zou er een overzicht moeten komen van de beschikbare plaatsen.

Nu loop ik hier al vast, ik kan simpelweg geen query verzinnen die alles dekt.
Het beste resultaat tot nu toe heb ik gekregen met een post uit een ander topic op dit forum. Daar stond de query:

Code:
SELECT plaats_id FROM RESERVERINGEN WHERE Not (AankomstDatumKeuzeGast between begindatum and einddatum

Hierdoor krijg ik dus alle plaatsen die op de aankomstdatum die de gast gekozen heeft vrij zijn. Nu is dit niet wat ik wil: ik wil namelijk een overzicht van de plaatsen die de hele verblijfsduur vrij zijn.

Kan iemand mij hiermee helpen?

Echt super bedankt alvast!
 
Hoi Thijs,
Uberhaupt klopt de redenering achter je query niet. In je tabel RESERVERINGEN staan alleen de paatsen die bezet zijn in welke periode, niet welke plaatsen er uberhaupt zijn.
Zeker in het begin zullen niet alle plaatsen die op de camping beschikbaar zijn ook in die tabel staan.
Stel "plaats 15" is nog nooit gereserveerd via je tabel en is dus zo-wie-zo vrij. Laat je een query, die wel zou "kloppen", los op die tabel, dan komt plaats 15 nog steeds niet te voorschijn omdat hij niet in die tabel voorkomt.

Je zou met een loop moeten gaan werken die alle plaatsen, stuk voor stuk controleert in de tabel RESERVERINGEN.
Eerst haal je alle plaats_id op uit PLAATSEN
dan binnen een while loop vuur je sql queries af op de tabel RESERVERINGEN om te controleren of je die plaats al bezet is in de gegeven periode.

Zo krijg je dan een mooi lijstje met plaatsen die wel beschikbaar zijn, kan de klant nog zelf aangeven ook welke plaats hij zou willen hebben ;-)

Over de exacte query moet ik even na denken, maar zo'n query moet wel mogelijk zijn lijkt mij.

Groeten
Olav
 
Laatst bewerkt:
Dat met die plaatsen, heb je gelijk in ja.

Ik ga even knutselen. denk je niet dat dit erg traag word wanneer er >5000 reserveringen inzitten? Of word het dan sowieso traag..

Ik laat het even weten als het gelukt is!
 
Dat met die plaatsen, heb je gelijk in ja.

Ik ga even knutselen. denk je niet dat dit erg traag word wanneer er >5000 reserveringen inzitten? Of word het dan sowieso traag..

Ik laat het even weten als het gelukt is!

Je hoeft niet alle 5000 reserveringen stuk voor stuk te controleren, dat is de truc van een slimme SQL query :-)
 
Ik ga voor elke plaats toch een query draaien?

Als ik voor elke plaats met de query controleer of hij vrij is die ik hierboven heb staan dan zou het toch goed zijn? Alleen nog even kijken welk resultaat wat betekend.
Probeer hier eens kritiek op te geven als je wil?
 
Ik ga voor elke plaats toch een query draaien?

Als ik voor elke plaats met de query controleer of hij vrij is die ik hierboven heb staan dan zou het toch goed zijn? Alleen nog even kijken welk resultaat wat betekend.
Probeer hier eens kritiek op te geven als je wil?

Je controleert inderdaad alle plaatsen, niet alle reserveringen.
Die slimme query daarmee bedoel ik dat je uberhaupt alleen die records in je tabel laat controleren die het zelfde plaats_id hebben. Stel de camping heeft 50 plaatsen, dan krijg je dus een loop die 50 queries afvuurt.
Dus wat je hier boven schrijft, klopt.

Met die 50 queries kan het wat trager worden, maar als je merkt dat het erg vertragend is, plaats je even een melding erbij op je site. Een klant begrijpt wel dat een systeem soms even moet zoeken naar beschikbare plaatsen.
Moet natuurlijk geen minuten gaan duren of zelfs een minuut. Als dat zal gebeuren, dan klopt er ergens anders iets niet.

Maar misschien kan ik hem wel slimmer krijgen zodat je niet 50 queries hoeft te laten afvuren, ik blijf zoeken voor je.

Olav
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan