Ik wil nu bijv een record met daarin 13:00-15:00 toevoegen op deze drie datums als dat kan, anders niet.
Op datum1 en datum3 gaat dat niet (bezet), maar wel op datum2 (range is nog vrij).
datum2 moet dus worden:
datum2: 09:00-11:30 13:00-15:00 20:00-22:30
de andere datums blijven ongewijzigd,
Hoe kan ik dit makkelijk doen?
Ik heb geprobeerd in een while steeds een record te lezen dan te bepalen of het record met de nieuwe range past, maar kan dat niet bepalen. Ik heb geprobeerd eerst alle records van eenzelfde datum te lezen en die in een variabele zetten en dan te bepalen of het nieuwe record met de gegeven tijdrange past, maar kom daar als beginner niet uit.
Hallo SanThe, bedankt voor je snelle reactie. Is mijn vraag niet "gewoon" een programmeerprobleem? Heeft het eigenlijk wel te maken met normaliseren van de database? En zo ja: kun je aangeven waarom?
Mvg.
Wanneer je een record toevoegt aan een database zal dit (nagenoeg) altijd aan het einde toegevoegd worden.
Er is geen mogelijkheid om dit op een bepaalde plaats in te voegen.
De volgorde waarin je de records terug krijgt bij het uitlezen bepaal je m.b.v. voorwaarden en evt sorteer sleutels en sorteervelden bij het uitlezen.
Het betreft ook alleen maar een INSERT als het om een record op een nieuwe datum gaat; en op die datum kan ik sorteren waardoor ik de records van die datum op een tabelregel in beeld kan brengen.
Ik hoop dat je me begrijpt, nu nog het antwoord op mijn vraag.
Vaak moet iets juist niet op een manier in de database komen zoals een normaal mens het zou willen lezen. Een database gaat op een hele andere manier met data om.
Hoe is je database tabel nu opgebouwd? Welke kolommen heb je?
Hallo Ramon,
In de betreffende tabel staat oa de datum waarvoor een erin opgenomen record geldt plus een aanvangs- en eindtijd (zie eerste bericht). De vraag is nu hoe ik een nieuw record voor diezelfde datum WEL kan invoeren als dat in dezelfde tijdrange past en NIET als het niet past.
De records worden eerst gesorteerd op oplopende datum en daarbinnen op oplopende tijdranges. In een while lees is dus steeds een record van een zelfde datum maar steeds met een andere tijdrange per record. Ik wil nu een record toevoegen met diezelfde datum en met dezelfde tijdrange als dat op die datum past.
Ik kan het niet duidelijker maken vrees ik. ZIe eerste bericht nog eens aub.
Je hebt dus nu 1 kolom waar een datum in staat en 1 kolom waar (als tekst??) een aanvangstijd en eindtijd in staat?
Om het maar heel bot te zeggen: gooi dat maar gelijk weg als dat zo is.
Maak er 2 kolommen van:
- aanvangmoment (datetime)
- eindmoment (datetime)
Elke regel in je tabel is dan 1 moment met een beginmoment (datum + tijd) en een eindmoment (datum + tijd).
Als je er een regel bij wil invoegen, controleer je eerst (bijvoorbeeld met SELECT query) of je 'nieuwe periode' al een andere periode overlapt. Zo ja; foutmelding laten zien, zo nee; insert query
Ik heb dus nu 1 kolom waar een datum in staat, 1 kolom waar (als tekst) een aanvangstijd in staat en nog een kolom waar de eindtijd (als tekst) in staat.
Elke regel in de tabel is dan 1 moment met een beginmoment (datum + tijd) en een eindmoment (datum + tijd).
Als ik op een zelfde datum een regel bij wil invoegen, controleer ik eerst of de 'nieuwe periode' al een andere periode (op die dag) overlapt. Zo ja; foutmelding laten zien, zo nee; insert query.
En daar zit nu het probleem want dan moet ik dus alle periodes tegelijk hebben om dat te kunnen checken. Moet ik dan info uit de vorige regel (record) steeds bewaren of hoe doe je dat? Als ik geen 'totaalbeeld' van een dag heb kan ik ook niet zien of de gewenste periode vrij of bezet is, toch??
Vervolgens wil je de periode 2014-08-22 14:10:00 tot 2014-08-22 14:20:00 invoeren.
Dan ga je dus controleren of er in dat tijdsbestek nog niets is.
Helemaal voorkauwen is niet leuk, dus hoe zou je zo'n controle zelf bedenken. Denk aan momenten vergelijken met bijvoorbeeld BETWEEN (SQL functie) of groter dan > of kleiner dan < in de WHERE.
Vervolgens wil je de periode 2014-08-22 14:10:00 tot 2014-08-22 14:20:00 invoeren.
Dan ga je dus controleren of er in dat tijdsbestek nog niets is.
Inderdaad en dat is nu hetgeen er niet wil lukken, omdat je dan eigenlijk alle records van één dag tegelijk moet hebben om te bekijken. Bij elke doorgang van de while-loop wordt er steeds één record gelezen en is de vorige weer weg. en heb ik de volgende nog niet. Moet ik dan de info uit de vorige steeds bewaren? Het is zuiver een programmeerprobleempje en geen database-issue.