login  Naam:   Wachtwoord: 
Registreer je!
 Forum

overlappen van periodes

Offline Stefan14 - 02/10/2006 23:00
Avatar van Stefan14PHP gevorderde Kan ik op de een of andere manier bij het aanmaken van een record controleren of er "periode-overlappingen" zijn, en zoja hoe?

bijv.
Je hebt de volgende records
id | begindatum | einddatum
---------------------------
1 | 2006-10-02 | 2006-10-09
2 | 2006-10-10 | 2006-10-17

hoe kun je dan voorkomen dat er een record zoals
3 | 2006-10-08 | 2006-10-15
ingevoegd kan worden?

Ik heb dit nodig voor een prijsvragen script waarbij gekeken wordt naar de huidige datum en aan de hand daarvan wordt een bepaalde prijsvraag uit de db geselecteerd, maar ik heb het script zo gemaakt dat hij een foutmelding geeft wanneer er meer dan 1 overeenkomstig resultaat is.
Dus dit moet ik dan ook proberen te voorkomen.

7 antwoorden

Gesponsorde links
Offline marten - 02/10/2006 23:06
Avatar van marten Beheerder datetime velden hoop ik?
Offline Stefan14 - 02/10/2006 23:10
Avatar van Stefan14 PHP gevorderde @marten, op dit moment date velden, maar kunnen ook datetime velden van gemaakt worden als dit makkelijker is, dan zet ik de tijd gewoon op 00:00:00
Offline marten - 02/10/2006 23:15
Avatar van marten Beheerder Stel je hebt een datum

10-02-06 (mm/dd/yy)

Je wilt niet dat je overlappingen krijgt dus ga je eerst kijken of je begin en/of einddatums hebt die 10-02-06 zijn. Dit is een makkelijke query.

Als dat niet zo is dan ga je kijken door middel van een lus of de datums die in de database staan groter en/of kleiner zijn dan de datum die je probeert in te voegen.

begindatum ---> 2006-10-02
eindatum ---> 2006-10-09
datum ---> 2006-10-03 (even voor de duidelijkheid)

2006-10-03 > 2006-10-02 dus overlapping
2006-10-03 < 2006-10-09 dus overlapping

snap je de bedoeling een beetje?

Offline Stefan14 - 02/10/2006 23:19
Avatar van Stefan14 PHP gevorderde ok, ik snap de bedoeling, maar is hier geen functie in mysql voor, want ik kan me indenken dat dit bij een tabel van enkele honderden records en over een paar jaar wel richting de duizend denk ik, dat zo'n loop behoorlijk wat tijd in beslag neemt of niet?
Offline marten - 02/10/2006 23:21 (laatste wijziging 02/10/2006 23:25)
Avatar van marten Beheerder http://dev.mysq...tions.html

bekijk ze eens zou ik zeggen

Maar bij de eerste query kan je volgens mij al veel data wegstrepen. En die hoeft niet zo heel groot te zijn:

  1. <?php
  2. $Query = mysql_query("SELECT id FROM tabelnaam WHERE begindatum = '" .$datum. "' OR einddatum = '" .$datum. "'");
  3. ?>

Offline Thomas - 03/10/2006 08:56
Avatar van Thomas Moderator Je moet kijken of de begindatum of de einddatum die je wilt invoeren valt tussen een reeds bestaande begin- of einddatum.

Als de datum-velden als DATE(TIME) zijn opgeslagen, dan kun je het volgens mij wel op de volgende manier controleren:

  1. SELECT *
  2. FROM whatever
  3. WHERE
  4. ('<startdatum hier>' BETWEEN begindatum AND einddatum)
  5. OR
  6. ('<einddatum hier>' BETWEEN begindatum AND einddatum)


Deze query zou dan geen resultaten op moeten leveren, dan heb je geen overlap. Let er wel op dat als je begindatum van de vorm 0000-00-00 is, je startdatum en einddatum dit ook moet zijn (of beide van de vorm 0000-00-00 00:00:00).
Offline Stefan14 - 03/10/2006 17:16
Avatar van Stefan14 PHP gevorderde Geweldig Fangorn! Dat is nog eens een makkelijke oplossing! thnx!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.225s