Bildereklame vises kun når du ikke er logget inn. Registrer deg eller logg inn for å kun vise tekstreklame.
Svar
 
Trådverktøy
Gammel 10. november 2009, 15:53   #1
azidops
 
Medlem siden: juni 2008
Innlegg: 8
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å?
Svar på og siter dette innlegget
Gammel 10. november 2009, 15:56   #2
slashdot
Watching you
slashdot's Avatar
nFF Crew
 
Medlem siden: nov. 2005
Innlegg: 19.109 / KP: 16193
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

Reunite Gondwanaland today!
Sist endret av slashdot; 10. november 2009 kl. 15:56.
Svar på og siter dette innlegget
Gammel 10. november 2009, 16:10   #3
azidops
 
Medlem siden: juni 2008
Innlegg: 8
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?
Svar på og siter dette innlegget
Gammel 10. november 2009, 16:13   #4
slashdot
Watching you
slashdot's Avatar
nFF Crew
 
Medlem siden: nov. 2005
Innlegg: 19.109 / KP: 16193
Sitat: Originalt skrevet av azidops Vis innlegg
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.

Reunite Gondwanaland today!
Svar på og siter dette innlegget
Gammel 10. november 2009, 16:46   #5
azidops
 
Medlem siden: juni 2008
Innlegg: 8
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?
Svar på og siter dette innlegget
Gammel 10. november 2009, 16:51   #6
slashdot
Watching you
slashdot's Avatar
nFF Crew
 
Medlem siden: nov. 2005
Innlegg: 19.109 / KP: 16193
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

Reunite Gondwanaland today!
Sist endret av slashdot; 10. november 2009 kl. 16:51.
Svar på og siter dette innlegget
Gammel 10. november 2009, 17:09   #7
Madsern
 
Medlem siden: feb. 2009
Innlegg: 26
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

Hello monday, I'm gonna treat you like a sunday!
Svar på og siter dette innlegget
Gammel 10. november 2009, 17:26   #8
azidops
 
Medlem siden: juni 2008
Innlegg: 8
Sitat: Originalt skrevet av slashdot Vis innlegg
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' )
Svar på og siter dette innlegget
Svar
Trådverktøy