Hoe dit het beste aan te pakken
Ik ben bezig met een camping managemente systeem. en ik ben nu bezig met het stukje dat dubbelboekingen voorkomt te schrijfen. Ik heb dus nu een tabel met alle boekingen. daarin staat begintijd (Bijv. 2004-12-11) en eind tijd (bijv. 2004-12-30), als nu iemand een boeking doet dan moet hij automatisch een veld toegewezen krijgen. (0 tm 15). Hoe kan ik dit het beste aanpakken. Ik heb nu een hele reeks if, while, en een enkele for loop maar ik denk niet dat ik het daarmee red. vandaar deze vraag:
Je weet dat je de sql database een heleboel rekenwerk kan laten doen? En is het niet beter om gebruik te maken van een timestamp o.i.d.
Ik weet wel dat hij dat kan, maar niet echt hoe :P
Ik gebruik ook een timestamp. de Y-m-d in MySQL heet die volgens mij Datetime :)
edit:
<b>Iemand misschien een mooi voorbeeldje van rekenen met datums met MySQL </b>
Gewijzigd op 11/12/2005 15:01:00 door Knorfski
Maar je kunt MySQL toch geen soort van if voorwaarden stellen. dus als het bijvoorbeeld mogelijk is om die reservering op die plaats te zetten.
Y-m-d heet in MySQL een DATETIME. Leg nog eens uit wat je precies wilt?
Is het zo: iemand doet een boeking voor bijvoorbeeld 10 dagen, op 11 december 2005. Moet dan automatisch de eindtijd (21 december 2005) ingevuld worden?
Dat heb ik al: :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$date2 = strtotime($aankomst);
$date3 = strtotime("+".$aantald." day", $date2);
$date4 = strtotime("+".$aantalw." week", $date3);
$date5 = strtotime("+".$aantalm." month", $date4);
$vertrek1 = $date5-$date2;
$date6 = strftime("%Y-%m-%d", $date5);
$tijd3 = $vertrek1 / 86400;
$tijd2 = number_format ( $tijd3, 0, ',', '.');
?>
$date2 = strtotime($aankomst);
$date3 = strtotime("+".$aantald." day", $date2);
$date4 = strtotime("+".$aantalw." week", $date3);
$date5 = strtotime("+".$aantalm." month", $date4);
$vertrek1 = $date5-$date2;
$date6 = strftime("%Y-%m-%d", $date5);
$tijd3 = $vertrek1 / 86400;
$tijd2 = number_format ( $tijd3, 0, ',', '.');
?>
-------------------
Maar nu, als er op 1 plaats een boeking is van 2006-01-10 tot 2006-01-20 is. en iemand anders die boekt 2006-01-18 tot 2006-01-28 dan moet hij bijvoorbeeld zeggen dat die plek vol is (Later moet hij dan doorverwijzen naar plaats2, maar dat is een zaak voor later).
Ook als bijvoorbeeld een boeking staat van 2006-01-10 tot 2006-01-20 en iemand plaatst een boeking van 2005-12-11 tot 2005-12-24 dan moet hij zeggen dat je wel op plek 1 mag staan.
Ik vertel het misschien niet zo duidelijk. maar ik hoop dat je het snapt :)
www.knorfski.nl.eu.org/camping
Dat is het begin :P
Ziet er nog niet uit hoor ;)
Gewijzigd op 11/12/2005 15:27:00 door Knorfski
edit: Knorfski, op het admingedeelte van je site kan ik gewoon op prijzen klikken en dan ben ik binnen! Die moet je nog ff afschermen.
Gewijzigd op 11/12/2005 15:29:00 door Jan Koehoorn
Dat weet ik :)
Maar het is verder ook nog niet in gebruik :)
Ik ga zo een paar uur op pad. Waarschijnlijk kijk ik vanavond nog wel even. Ik geef een soort van richting aan:
Wanneer is een afspraak niet-overlappend? Als de begintijd van de een voorbij de eindtijd van de ander ligt, of andersom.
Probeer daar eens een query voor te verzinnen?
CU vanavond misschien nog!
Het is bijde :P
Als iemand een plaats boekt op een langer termijn. en iemand anders diet boekt eerder dan. is het ervoor maar het kan ook andersom.
aanvraagE = de aangevraagde einddatum
dbB = begindatum van reeds in database staande boekingen
dbE = einddatum van reeds in database staande boekingen
"... WHERE (aanvraagE < dbB) OR (aanvraagB > dbE) ... "
Dan heb je 'em
Het is beide:P
Als iemand een plaats boekt op een langer termijn. en iemand anders diet boekt eerder dan. is het ervoor maar het kan ook andersom.
Gewijzigd op 11/12/2005 16:27:00 door Knorfski
@PHPerik: Er zijn niet 2 boekingen, maar heel veel.
Bijde? Beide bedoel je.
@Arjan Kapteijn: Dan je :P Dyslect :P, dan maak je die fouten snel :P
SELECT * FROM tabel WHERE camper=$iets AND ( (begindatum NOT BETWEEN $begin AND $eind) AND (einddatum NOT BETWEEN $begin AND $eind) )
@ Knorfski: ik vind het altijd zo gek dat ze juist voor dyslectici zo'n moeilijk woord hebben verzonnen.
Idd een moeilijk woord ;)
En PHPerik Bedankt! :D :D :D
En bedenk goed, dyslecten zijn vaak 3x beter in andere dingen ;).
Gewijzigd op 11/12/2005 23:41:00 door Arjan Kapteijn
Klopt, dyslectie en intelligentie hebben weinig met elkaar te maken. Ikzelf gooi mijn berichten niet door de spellingscontrole, overigens.