Checken of tijdspanne beschikbaar is.

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Goedemiddag dames en heren!

Ik heb een vraag over een applicatie die ik aan het schrijven ben (PHP&MySQL). Het is een planningsapp en ik moet zorgen dat twee "items" in de planning niet met elkaar overlappen (met andere woorden een persoon kan geen twee dingen tegelijk doen).

Hieronder een (versimpelde) weergave van de structuur van mijn tabel:

Code:
ID  | START               | END                 | DESCRIPTION
----+---------------------+---------------------+------------------------
1   | 2012-06-20 12:00:00 | 2012-06-20 13:00:00 | Rondvlucht
1   | 2012-06-20 15:00:00 | 2012-06-20 18:00:00 | Bannertowing

Hierbij zijn de velden START en END uiteraard van het type DATETIME.

Nu wil ik dat een nieuwe ingave hier niet mee kan conflicteren, ik zou nu bijvoorbeeld geen vlucht van 12:30 tot 13:30 kunnen invoeren, want dat overlapt met de rondvlucht. Wel van 13:00 tot 15:00.

Heeft iemand enige idee hoe ik dit het handigst kan doen? Als ik dit beter in PHP kan afvangen dan mogen jullie dat uiteraard ook aangeven, dan verplaats ik het topic daar naartoe.

Zelf heb ik al even zitten denken om de DATETIMES te converteren naar timestamps en daar een beetje wiskunde op los te laten, maar als jullie betere opties hebben, dan graag :)

Bij voorbaat dank!
 
Laatst bewerkt:
Heb het voor nu opgelost met de volgende query, maar ik heb zo'n idee dat dit niet helemaal optimaal is ;-)

[SQL]SELECT ID FROM flights WHERE ((START BETWEEN '2012-06-20 15:30:00' AND '2012-06-20 16:30:00') OR (END BETWEEN '2012-06-20 15:30:00' AND '2012-06-20 16:30:00') OR ('2012-06-20 15:30:00' BETWEEN START AND END) OR ('2012-06-20 16:30:00' BETWEEN START AND END)) AND (PLANE = '2' OR PILOT = '1') LIMIT 1[/SQL]

De volgende clause:

[SQL]AND (PLANE = '2' OR PILOT = '1')[/SQL]

dient er in deze voor om te zorgen dat dus zowel de piloot als het vliegtuig beschikbaar zijn om iets in te plannen.

Als iemand nog tips heeft blijven die welkom!
 
In principe hoort de logica hiervoor in je back-end. Je vraagt alle bezette tijden op en je kunt zeer eenvoudig alle vrije tijden daaruit halen.

Je kunt in je database wel koppelen aan een "pilot-resource" en "plane-resource" om je overzicht te vergemakkelijken.

Waarom probeer je dit via de database te doen? Ik zelf zie er niet echt een use-case voor, maar ik laat me graag verrassen :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan