' freak.no - PHP: Lage ukekalender - Trenger forslag til problemløsning
freak.no

freak.no (https://freak.no/forum/index.php)
-   Web-utvikling (https://freak.no/forum/forumdisplay.php?f=67)
-   -   PHP: Lage ukekalender - Trenger forslag til problemløsning (https://freak.no/forum/showthread.php?t=142939)

azidops 10. november 2009 16:53

PHP: Lage ukekalender - Trenger forslag til problemløsning
 
Hei.

Holder på å lage en kalenderapplikasjon der man bl.a. kan få oversikt over gjøremål uke for uke.
Problemet er å finne en effektiv måte å løse dette på.

Målet er å vise kalenderen på følgende måte:
Sitat:

....... | Mandag | Tirsdag | Onsdag | Torsdag | Fredag | Lørdag | Søndag
08.00 |Gym......|...........|Dansing..|.............|............| ...........|..........
09.00 |...........|Fisking...|Dansing..|.............|............ |...........|..........
10.00 |Opera....|...........|...........|..............|.......... ..|...........|..........
11.00 |...........|...........|............|..............|....... .....|...........|..........
12.00 |...........|...........|............|..............|....... .....|...........|..........
13.00 |...........|...........|............|..............|....... .....|...........|..........
14.00 |...........|...........|............|..............|....... .....|...........|..........
15.00 |...........|...........|............|..............|....... .....|...........|..........
16.00 |...........|...........|............|..............|....... .....|...........|..........
Aktiviteten er lagret i DB som php-timestamp. Dvs. at tidspunkt der det ikke aktivitet har ingen oppføring i DB.
Slik jeg gjør det nå så henter jeg ut oppføringene fra DB sortert etter timestamp ved å angi timestamp for mandag kl. 00.00 til søndag 23.59.

Det store problemet her at hvis dette skrives ut til <table> så må verdiene skrives ut radvis og ikke kolonnevis pga. at det er slik du bygger en <table>.
Da må jeg først sammenligne timestamp for mandag kl. 08.00 med resultat fra spørringen, så tirsdag kl 08.00 osv. helt til søndag. Så begynner man på nytt igjen mandag 09.00, tirsdag osv.
Men da jeg har hentet ut dataene sortert så ligger aktivitetene i denne rekkefølgen:
Mandag: Gym
Mandag: Opera
Tirsdag: Fisking
Onsdag: Dansing
Onsdag: Dansing

Hvordan er den beste måten å løse dette på?

vidarlo 10. november 2009 16:56

Bruke to felt i mysql - et med datatype date og et med datatype time. Da vil du kunne be om å få alle mellom 1.6.2010 og 7.6.2010 etc etc.

Mykje meir elegant imho ;)

azidops 10. november 2009 17:10

Takk for svar.

Men hvordan løser dette problemet?
Mener du at man skal lage flere spørringer der man først spør etter alle aktiviteter kl.08:00 fra 1.6.2010-7.6.2010, så neste spørring kl.09:00 fra 1.6.2010 - 7.6.2010 osv?

vidarlo 10. november 2009 17:13

Sitat:

Sitat av azidops (Innlegg 1546247)
Takk for svar.

Men hvordan løser dette problemet?
Mener du at man skal lage flere spørringer der man først spør etter alle aktiviteter kl.08:00 fra 1.6.2010-7.6.2010, så neste spørring kl.09:00 fra 1.6.2010 - 7.6.2010 osv?

Du kan velge alle fra 1.6.2010 til 7.6.2010, og deretter sortere etter klokkeslett f.eks. Difor ser eg for meg at det er /enklast/ å dele det i to felt i mysql, sjølv om det nok kan gjerast med eitt felt og mysql sine funksjoner for tidsbehandling.

order-funksjonen i mysql sorterer rett iht. tid om datatypen er time.

azidops 10. november 2009 17:46

Ok, da forstår (tror) jeg hva du mener. Men jeg kan allerede sortere resultatene i MySQL fordi aktivitetene ligger inne med PHP-timestamp (int). Men problemet oppstår når jeg skal trekke ut resultatet fra arrayen ( $result = mysql_query($query) ).
Da er det problematisk at resultatene ligger sortert fordi en <table> blir opprettet slik:
Sitat:

----------> (linjeskift)
----------> (linjeskift)
----------> (linjeskift)
Da kommer tirsdag kl 08:00 før mandag kl. 09:00 mens i resultatsettet ligger resultatet kanskje slik:
Mandag kl 08:00
Mandag kl 09:00
Mandag kl 12:00
Tirsdag kl 09:00
Tirsdag kl 13:00
osv.

Jeg vet bare hvordan man kan hente ut data fra mysql_query($query) i sortert rekkefølge. Finnes det noen måter å søke i et resultatsett slik at man kan hente ut data usortert?

vidarlo 10. november 2009 17:51

Nei, du har ikkje forstått poenget mitt. Sjå for deg følgjande spørring:
"SELECT * FROM `aktiviteter` ORDER BY `klokkeslett`,`dato`"

Den vil sortere slik at du får:
Mandag kl 08:00
Mandag kl 09:00
Tirsdag kl 09:00
Mandag kl 12:00
Tirsdag kl 13:00

Madsern 10. november 2009 18:09

Hey ;)
Jeg har et TOPP program du bør prøve, det var med i hjemme pc en gang..
Det heter EfficientPIM, bruker det mye til å legge inn lekser og sånn :)

azidops 10. november 2009 18:26

Sitat:

Sitat av slashdot (Innlegg 1546292)
Nei, du har ikkje forstått poenget mitt. Sjå for deg følgjande spørring:
"SELECT * FROM `aktiviteter` ORDER BY `klokkeslett`,`dato`"

Den vil sortere slik at du får:
Mandag kl 08:00
Mandag kl 09:00
Tirsdag kl 09:00
Mandag kl 12:00
Tirsdag kl 13:00

Da forstår jeg. Det er nok den beste løsningen. Hadde håpet å unngå det siden jeg allerede har laget andre funksjoner som baserer seg på timestamp-løsningen, men på sikt vil det likevel lønne seg å gjøre endring i databasen.

Takk for svar!

Epilog:

Jeg fant en måte å unngå å gjøre endringer i DB-strukturen. Jeg har lagret start og slutt-tidspunkt som Unix timestamp og dermed kunne jeg bruke funksjonen FROM_UNIXTIME() til å kjøre den spørringen som Slashdot foreslo.
Kode:

SELECT FROM_UNIXTIME( `start` , '%H:%i:' ) AS klokken, FROM_UNIXTIME( `start` , '%Y-%m-%d' ) AS dato
FROM `meeting`
ORDER BY FROM_UNIXTIME( `start` , '%H:%i:' ) , FROM_UNIXTIME( `start` , '%Y-%m-%d' )



Alle tidspunkt er GMT +2. Klokken er nå 17:16.