[php/mysql]maand overzicht evenementen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
ik heb een database met daarin evenementen. Voor deze evenementen heb ik de begindatum en de einddatum opgeslagen in het volgende formaat: YYYYmmdd
Ik wil nu op een php pagina een lijst maken van 1 betreffende maand, laten we zeggen mei 2007.
naar mijn idee heb ik een aantal mogelijkheden van de evenementen.

1) het gehele evenement ligt binnen de te tonen maand
of
2) de begin of eind datum ligt buiten het te bekijken maand
of
3) beide liggen buiten de te tonen maand.

Hoe kan ik dit nu het beste in een mysql query gieten??
De eerste mogelijkheid is makkelijk:
code:
1
SELECT * FROM ev WHERE begindatum LIKE '200705%' AND einddatum LIKE '200705%'

de overige twee worden wat lastiger.

wie kan me helpen en geeft me net even dat zetje in de goede richting?

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Even wat roestig maar je kan toch optie 3 al uitsluiten als evenement voor de maand mei?

Dus alleen statement 2 moet nog waar zijn; iets met "where begindatum like 200705%" en die join unionje dan met "where einddatum like 200705%"

http://dev.mysql.com/doc/refman/5.0/en/union.html

*edit*
Wacht ff... Je kan toch statement 1 & 2 samenvoegen? Want blijkbaar is de vereiste voor een lijst dat een van de 2 datums (ja, data, maar dat is ff syntaxueel niet handig) in mei ligt?

[ Voor 36% gewijzigd door MAX3400 op 18-05-2007 21:56 ]

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:10

Knutselsmurf

LED's make things better

Gebruik om te beginnen maar eens het juiste datatype. Dan kan je ook de ingebouwde functies voor datum-berekeningen, zoals YEAR() en MONTH() gebruiken.

Alle evenementen die dan in de maand mei vallen, eindigen op of na 1 mei en beginnen op of voor 31 mei.

Dan ben je met 1 query klaar.

[ Voor 31% gewijzigd door Knutselsmurf op 18-05-2007 21:56 ]

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Begindatum moet kleiner zijn dan het einde van de periode EN einddatum moet groter zijn dan het begin van de periode. Dit klinkt misschien wat tegenintuitief, maar teken het anders maar, dit is gewoon dé oplossing. :Y) En dat dus in 1 query. :)

En daarnaast moet je uiteraard de juiste datatypes gebruiken. :P

[ Voor 4% gewijzigd door Voutloos op 18-05-2007 21:57 ]

{signature}


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
MAX3400 schreef op vrijdag 18 mei 2007 @ 21:53:
Even wat roestig maar je kan toch optie 3 al uitsluiten als evenement voor de maand mei?

Dus alleen statement 2 moet nog waar zijn; iets met "where begindatum like 200705%" en die join unionje dan met "where einddatum like 200705%"

http://dev.mysql.com/doc/refman/5.0/en/union.html
stel je voor dat het evenement begint in januari 2007 en eindigt in juli 2007, dan valt de gehele maand mei in het te overbruggen gebiedje :) dus kan ik ze niet absoluut uitsluiten!

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 19-09 19:59

MAX3400

XBL: OctagonQontrol

Iets met

code:
1
2
3
4
5
(SELECT blaat FROM ev WHERE begindatum like 200705%)
UNION
(SELECT blaat FROM ev WHERE einddatum like 200705%)
UNION
(SELECT blaat FROM ev WHERE begindatum < 200705% AND einddatum > 200705%);


offtopic:
Let niet op syntax, datatypes of whatever; SQL is niet mijn main specialisme maar de gedachtengang is duidelijk?

[ Voor 43% gewijzigd door MAX3400 op 18-05-2007 22:01 ]

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
Voutloos schreef op vrijdag 18 mei 2007 @ 21:56:
Begindatum moet kleiner zijn dan het einde van de periode EN einddatum moet groter zijn dan het begin van de periode. Dit klinkt misschien wat tegenintuitief, maar teken het anders maar, dit is gewoon dé oplossing. :Y) En dat dus in 1 query. :)

En daarnaast moet je uiteraard de juiste datatypes gebruiken. :P
ghehehe f*ck zeg das waar ja... 1 query en het klopt...

maar ik zie nu al twee mensen die me wijzen op de juiste datatypes. Wat bedoelen jullie daarmee?
mijn insteek om yyyymmdd te gebruiken was dat ik het dan makkelijk gebruiken kan om te sorteren. aangezien het gewoonoplopende getallen waren...

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:10

Knutselsmurf

LED's make things better

hobbeldebobbel schreef op vrijdag 18 mei 2007 @ 22:00:
[...]


ghehehe f*ck zeg das waar ja... 1 query en het klopt...

maar ik zie nu al twee mensen die me wijzen op de juiste datatypes. Wat bedoelen jullie daarmee?
mijn insteek om yyyymmdd te gebruiken was dat ik het dan makkelijk gebruiken kan om te sorteren. aangezien het gewoonoplopende getallen waren...
Er is een speciaal date-type. Eventueel ook een datetime-datatype. SQL kan daar ook gewoon op sorteren. Kijk hier maar eens rond: http://dev.mysql.com/doc/refman/4.1/en/data-types.html

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
mooi het werkt:
http://archipics.sturb.nl/agenda.php?actie=maand
met de volgende code:
code:
1
2
3
$sql = "SELECT ev.id, ev.begindatum FROM ag_evenementen AS ev WHERE
        begindatum <= '".$datum.$aantalDagen."'
        AND einddatum >= '".$datum."01' ORDER BY begindatum";

hier zou een slimme opmerking kunnen staan
maar die staat er niet


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 17:05

orf

Maar gebruik tóch maar een date(time) kolom en de bijbehorende datum functies. :)

Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:10

Knutselsmurf

LED's make things better

Inderdaad. Hoe wil je bijvoorbeeld zonder date-datatype bepalen hoeveel dagen een evenement duurt? Of op welke dag van de week een evenement is? En dan heb ik het nog niet eens over schrikkeldagen, of evenementen die van 25 december tot 15 januari lopen.

- This line is intentionally left blank -

Pagina: 1