begin en einddatum check (mysql en php)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Davey Mat

Davey Mat

20/03/2014 15:52:29
Quote Anchor link
Hallo allemaal,

Ik heb een vervelend probleem waar ik maar niet uit kom na veel denkwerk. Het probleem is als volgt:

Gebruikers kunnen via een formulier verlof aanvragen waar ze een begindatum invoeren en een einddatum.
Gebruiker1 wil bijvoorbeeld van 5-4-2014 tot en met 8-4-2014 vrij vragen.

Geen probleem, dat werkt, er komt een nieuwe entry in de database met "datum1: 5-4-2014" en "datum2: 8-4-2014".
Nu bedenkt gebruiker 1 een week later dat hij van 6 maart tot en met 10 maart vrij wil hebben.
Gebruiker1 stuurt nieuw verzoek en vult bij datum1: 6-4-2014 in en bij datum2: 10-4-2014.

Hier dus het probleem, hierdoor heb ik 6,7 en 8 maart dubbel in het systeem staan dat gebruiker1 vrij wil hebben.
Dan zou je zeggen dat de gebruikers dat zelf moeten controleren, maar dat gebeurt in werkelijkheid niet, en degene die dit hoort te controleren vergeet dit blijkbaar ook. Ik zou daarom graag een controle willen maken dat als de gebruiker al een entry in de database heeft waarbij de nieuwe aanvraag in de datum range van datum1 en datum2 zit er een melding komt dat dit niet mogelijk is.

Ik hoop dat ik een beetje duidelijk ben want ik kom er echt niet aan uit.

Alvast veel dank voor wie mij wil helpen!
 
PHP hulp

PHP hulp

23/12/2024 02:24:44
 
Michael -

Michael -

20/03/2014 15:55:51
Quote Anchor link
Waarom een nieuwe insert als de gebruiker iets wilt wijzigen?
Je kunt ook controleren of gebruiker1 al een entry heeft, zo ja UPDATE, zo nee INSERT.
Daarnaast worden datums opgeslagen als date(YYYY-MM-DD) dus niet 5-4-2014 maar 2014-04-05
Anders zou je dit met BETWEEN moeten controleren.

WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
Gewijzigd op 20/03/2014 16:03:13 door Michael -
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/03/2014 16:57:07
Quote Anchor link
In de situatie van TS krijg je wat meer controles in de WHERE:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
WHERE
(employee_id = 666)
AND
(
    start_date BETWEEN '2014-04-06' AND '2014-04-10'
    OR
    end_date BETWEEN '2014-04-06' AND '2014-04-10'
    OR
    (start_date < '2014-04-06' AND end_date > '2014-04-10')
)

De laatste voor het geval dat iemand zijn verlof wil inkorten ;-)
Gewijzigd op 20/03/2014 18:31:21 door Ger van Steenderen
 
Davey Mat

Davey Mat

20/03/2014 17:20:55
Quote Anchor link
Bedankt voor de reacties!

Het is niet zozeer dat iemand zijn verlof wil aanpassen, maar ik merk meer dat mensen vergeten dat ze al een verlofaanvraag in die "range" hebben ingestuurd.
Daarom moet ik dus echt controleren of er in die range al een aanvraag is en als ze dan bijvoorbeeld een extra dag erbij willen, dat ze deze apart moeten aanvragen OF dat dit automatisch erbij word aangepast. Probleem is dat de hele entry dan opnieuw moet worden beoordeeld en dat die extra dag misschien niet erbij kan, maar de oude entry wel kan blijven staan, maar in dit geval moet de hele entry weer afgekeurd worden?

@Micheal - Ja klopt dat het als YYYY-MM-DD ingevoerd wordt in de database, bedankt in ieder geval;)

@Ger van Steenderen
Ik zal vanavond nog even kijken naar jouw stukje code. Maar dit is volgens mij zo dat de gebruiker zijn entry dus wil wijzigen?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/03/2014 17:36:47
Quote Anchor link
Nee, dat is voor de controle of er in die range al een aanvraag is.
Er zijn een aantal mogelijkheden:
- Alleen de start datum valt binnen de range
- Alleen de eind datum valt binnen de range
- Zowel de start datum als de eind datum vallen binnen de range (dit wordt al ondervangen bij de eerste twee)
- De range valt binnen de start datum en eind datum

Als je de where zo opbouwt als mijn voorbeeld heb je altijd het juiste resultaat

Toevoeging op 20/03/2014 18:32:50:

Ik heb even het voorbeeld aangepast, zodat je alleen de aanvragen van een bepaalde werknemer controleert (leek me zinvol)
 
Davey Mat

Davey Mat

20/03/2014 23:05:53
Quote Anchor link
Heel erg bedankt Ger en Micheal,

Dit is een teken dat ik al een tijdje uit de queries ben, helemaal niet aan "between" gedacht!

@Ger: bedankt voor je duidelijke voorbeeld. Ik zal het in de komende dagen als ik er tijd voor heb eens gaan implementeren en hopen dat het dan werkt, als ik niks over het hoofd heb gezien;). In ieder geval vriendelijk bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.