[PHP & MySQL] Valt periode in andere periode?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een poosje aan het prutsen, maar ver kom ik helaas niet, wellicht dat 1 van jullie mij kan helpen.

Ik neem van een boeking voor een hotel een aankomst en een vertrekdatum op in een MySQL database.

Stel iemand komt op 20 januari 2006 en vertrekt op 5 maart 2006.
Ik wil nu een overzicht genereren van alle gasten die in Februari aanwezig zijn, daar hoort de bovenstaande gast ook bij. Hoe vergelijk ik die 2 periodes (de periode dat de gast aanwezig is en de maand februari) nu met elkaar zodat bovenstaande entry in de database in de resultaten voor komt?

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het lijkt me dat je dan alle gasten selecteert die een boeking hebben waarvoor geldt dat de begindatum op of vóór beginPeriodeOverzicht ligt, en de einddatum na of op eindePeriodeOverzicht :?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
En een gast die op 5 feb komt en 10feb vertrekt? die komt niet in die resultaten voor maar is wel in februari aanwezig..

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Schrijf je probleem uit in logica en de mogelijkheden.

A=Aankomst datum
B=Vertrek Datum

C=Start Periode
D=Einde Periode.

code:
1
2
3
4
5
6
7
8
9
10
11
A<B (altijd)
C<D (altijd)

kom je dus uit op de volgende mogelijkheden die bestaan.

A<C & B<C (negatief)
A<C & B>C & B<D (positief)
A<C & B>D (positief)
A>C & B<D (positief)
A>C & A<D & B>D (positief)
A>D & B>D (negatief)


Zorg dus voor een vergelijking waarin alle positieve gevallen opgevangen wordt en vertaal deze in een query.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
( begindatum >= beginperiode EN begindatum <= eindperiode )    // begin datum binnen periode
OF ( einddatum >= beginperiode EN einddatum <= eindperiode )  // eind datum binnen periode
OF ( begindatum <= beginperiode EN einddatum >= eindperiode )// begin datum voor periode en eind datum na periode

[ Voor 55% gewijzigd door Verwijderd op 17-01-2006 21:14 ]


Acties:
  • 0 Henk 'm!

  • wica
  • Registratie: Februari 2002
  • Laatst online: 21-02 09:21

wica

De duivel jacht op me

Licht er natuurlijk aan hoe je table in elkaar steekt. Maar daar je zou zoiets kunnen doen.

select * from <table> where in > '2006-01-31' AND uit < '2006-03-01'

RFC | The Linux Document Project | gentoo.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thnx Dusty, volgens mij ben jij de enige die 't snapt ;) Ik ga er ff verder mee prutsen!

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

@wica:
SQL:
1
select * from <table> where in > '2006-01-31' AND uit < '2006-03-01'
Dan krijg je de mensen die in februari aankomen en vertrekken :)

[ Voor 17% gewijzigd door kenneth op 17-01-2006 21:14 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 18-09 21:39
dusty schreef op dinsdag 17 januari 2006 @ 21:06:
Schrijf je probleem uit in logica en de mogelijkheden.

A=Aankomst datum
B=Vertrek Datum

C=Start Periode
D=Einde Periode.

code:
1
2
3
4
5
6
7
8
9
10
11
A<B (altijd)
C<D (altijd)

kom je dus uit op de volgende mogelijkheden die bestaan.

A<C & B<C (negatief)
A<C & B>C & B<D (positief)
A<C & B>D (positief)
A>C & B<D (positief)
A>C & A<D & B>D (positief)
A>D & B>D (negatief)


Zorg dus voor een vergelijking waarin alle positieve gevallen opgevangen wordt en vertaal deze in een query.
En dan kom je,na vereenvoudiging, volgens mij uit op :

A<D & B>C is wat je zoekt. Of kijk ik scheel?

Whatever


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Sloompie schreef op dinsdag 17 januari 2006 @ 21:26:
[...]
En dan kom je,na vereenvoudiging, volgens mij uit op :

AC is wat je zoekt. Of kijk ik scheel?
Zolang A voor B is en C voor D: ja. :P

[ Voor 4% gewijzigd door dusty op 17-01-2006 21:30 . Reden: ( html rechten :P ) ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 18-09 21:39
Zolang A wat????

EDIT : A<B en C<D neem jij zelf al voor waar aan, toch? En anders vertrekt iemand voor-ie aankomt, of ligt je eind periode voor het begin? :?

[ Voor 185% gewijzigd door DigiK-oz op 17-01-2006 21:31 ]

Whatever


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
idd aankomst moet altijd voor vertrek zijn, en de periode wordt niet ingegeven door de gebruiker, er wordt gewoon een maand aangeklikt dus dat gaat altijd goed :D

Dus A<D & B>C it is :D thnx voor de hulp!

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Sloompie schreef op dinsdag 17 januari 2006 @ 21:29:
EDIT : A<B en C<D neem jij zelf al voor waar aan, toch? En anders vertrekt iemand voor-ie aankomt, of ligt je eind periode voor het begin? :?

Ligt er dus aan wie die waarden invoert, en hoe goed jij 'de gebruiker' vertrouwd, en aangezien je de gebruiker nooit moet vertrouwen moet je er wel op controleren (ergens) of onmogelijk maken :P

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De gebruiker voert de aankomst en vertrekdatum in, maar daar wordt op gechecked of dit juiste data zijn en of de aankomst wel voor vertrek is.

Acties:
  • 0 Henk 'm!

  • Gurbe de n00b
  • Registratie: Juni 2003
  • Laatst online: 08-02-2024
Misschien kan je ook wel even iets maken met de BETWEEN sql command.

Bijv: klikkerdeklik!

[ Voor 38% gewijzigd door Gurbe de n00b op 17-01-2006 21:51 ]

Portfolio


Acties:
  • 0 Henk 'm!

  • wica
  • Registratie: Februari 2002
  • Laatst online: 21-02 09:21

wica

De duivel jacht op me

kenneth schreef op dinsdag 17 januari 2006 @ 21:14:
@wica:
....
Dan krijg je de mensen die in februari aankomen en vertrekken :)
Ja, je hebt gelijk. Heb niet goed gelezen.

Maar dan kan je toch het volgende doen?
SQL:
1
select * from <table> where `in` <= '2006-02-28' AND `uit` >= '2006-02-01'

[ Voor 58% gewijzigd door wica op 17-01-2006 22:41 ]

RFC | The Linux Document Project | gentoo.

Pagina: 1