Ik ben bezig met het maken van een planner. Voordat ik een taak ga inserten in de database wil ik checken of er al iets gepland staat, dit om dubbele afspraken te voorkomen.
Dus ik heb de volgende gegevens:
startdate: 1-10-2009
start time: 21:06
duration (in uur): 2
Hoe kan ik checken of er tussen 1-10-2009 21:06 en 1-10-2009 23:06 al iets gepland staat?
In de database heb ik twee kolommen: start en eind...
De nieuwe Task mag daar niet tussen vallen.
Hoe is dat op te lossen???
Deze keer ga ik je de code niet voorkauwen omdat ik je de middelen al heb aangeboden om een degelijke SQL-query op te bouwen.
Als je de SQL opbouwt die ik hier heb gegeven dan zal je wel of geen record terugkrijgen.
via PHP.net: mysql_num_rows weet jij hoeveel records er zijn gevonden. Als je 0 records hebt gevonden mag er een nieuwe afspraak worden gemaakt. anders niet
Dat kan ik je melden dat de door jou aangeboden query helaas niet zal voldoen. Je gaat er met je query namelijk vanuit dat een afspraak maar 1 moment heeft, en houdt geen rekening met de lengte van de afspraak.
Als ik in de door jou aangeleverde query een afspraak heb staan met een waarde in het veld `afspraak` van '2009-10-1 21:10:00', dan krijg ik inderdaad een COUNT van 1 terug. Maar wat nou als ik dit heb:
`afspraak_start` = '2009-10-1 21:00:00'
`afspraak_end` = '2009-10-1 23:00:00'
Hoe dien ik er dan mee om te gaan? Hij zal namelijk in jouw query niet matchen, omdat de datum in het veld niet binnen de door jou gestelde range ligt. Maar er is op dat moment dus wel degelijk al een afspraak.
@roy
Kun jij even een .sql ergens uploaden, of plaatsen op plaatscode, met daarin de CREATE TABLE en de INSERT statements voor de betreffende tabel? Op die manier kunnen mensen hier eenvoudig even zelf wat testen. Ik zou het jammer vinden als ik 45 minuten bezig ben met een oplossing voor je, om erachter te komen dat jouw database anders is en het daarom niet zal werken.
Dat kan ik je melden dat de door jou aangeboden query helaas niet zal voldoen. Je gaat er met je query namelijk vanuit dat een afspraak maar 1 moment heeft, en houdt geen rekening met de lengte van de afspraak.
Als ik in de door jou aangeleverde query een afspraak heb staan met een waarde in het veld `afspraak` van '2009-10-1 21:10:00', dan krijg ik inderdaad een COUNT van 1 terug. Maar wat nou als ik dit heb:
`afspraak_start` = '2009-10-1 21:00:00'
`afspraak_end` = '2009-10-1 23:00:00'
Hoe dien ik er dan mee om te gaan? Hij zal namelijk in jouw query niet matchen, omdat de datum in het veld niet binnen de door jou gestelde range ligt. Maar er is op dat moment dus wel degelijk al een afspraak.
Je slaat de duur van de afspraak ook niet op. Je slaat op wanneer de afspraak is afgelopen. (dus net zoals de begin tijd, alleen dan 2 uur later).
Ik laat PHP de 2 timestamp van 2 uur later genereren en neem deze mee naar de SQL waar ik hem ga gebruiken.
Edit: Ik snap hem denk ik al.. ik controleer maar op 1 veld terwijl je er 2 nodig hebt . Als het probleem vanavond niet opgelost is zal ik gaan kijken moet nu echt aan het werk