Statistik på arbejdstid

Tags:    php mysql sql

Hejsa.

Jeg har tidligere postet en tråd herinde omkring at hente og regne hvor meget man har arbejdet på de forskellige dage.

Det lever dog ikke helt op til det jeg ønsker.
Derfor kommer der her et nyt spørgsmål.

Jeg har i min database en tabel hvori mine arbejdstider ligger, dem beregner jeg så lidt på så jeg får hvor meget jeg arbejder den enkelte dag samt et overslag på hvor meget jeg kan forvente i løn på denne dag.

Jeg ønsker så for lidt statistik at udregne hvor mange timer jeg har arbejdet total pr ugedag.

Altså total timer pr man, tirs, ons, tors, fre, lør, søn.
Mit umiddelbar bud pt er at jeg laver 7 sql forespørgsler til databasen, men dette er på ingen måde performance venligt, da jeg også senere kobler på den tid jeg holder pause, dvs 7 forespørgsler mere, det betyder samlet set at jeg på en enkelt side vil få ikke mindre end 15 forespørgsler.
Min teori er at jeg kan barbere det ned til 3.

Er der nogen der har nogen anelse om hvordan jeg laver det med et sql, kald?

Et sidespørgsmål er, hvordan kan jeg bedst implementere pause i min tabel. Skal jeg sætte den som en varchar, int, eller timestamp? Pausen vil være noget jeg taster ind manuelt, da det kan svinge meget med pause, og jeg derfor ikke kan give nogen præcis formel på udregning af min pause. (jeg ved godt at der i HKs aftale er 5 min pr. time og man kan holde pause når man har optjent 15 min.).



7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hejsa.

Hvad med at lave et SQL query alá

Fold kodeboks ind/udSQL kode 


timediff() giver forskellen i tid, hvilket du så kan regne om til timer, og så gange med din timeløn. weekday() giver hvilken ugedag det er 0 for mandag, 6 for søndag. date() giver datoen, så du kan kende forskel på de forskellige mandage.

Håber du kan bruge det til noget :)



Nu havde du jo en fin SQL forespørgsel fra tidligere, den kan du jo bygge videre på.

SELECT DAYOFWEEK(`from`) AS dow, TIMEDIFF(TIME(MIN(`from`)),TIME(MAX(`to`))) FROM work_schedule GROUP BY WEEK(`from`), DAYOFWEEK(`from`) ORDER BY WEEK(`from`), DAYOFWEEK(`from`)

Ovenstående er selvfølgelig ikke testet, men skulle gerne give en ca. opstilling på alle tidsforskelle mellem start til slut, hver uge, hver dag.



Hvordan ser din tabel ud helt præcist?

Kan du vise det?



Du får lige et sql-dump
Fold kodeboks ind/udSQL kode 




Hvis jeg har forstået det rigtigt, at du vil have totalt antal timer pr. ugedag, så vil jeg foreslå dig at tage et kig på funktionen mktime(); PHP manual
Jeg brugte den selv for kort tid siden, hvor jeg skulle have udskrevet navn på ugedag.
Fold kodeboks ind/udPHP kode 


Jeg har ikke lige tid til at skrive scriptet, men her kan du se hvordan jeg brugte den :-)

Fold kodeboks ind/udPHP kode 




Narh både og, det i kommer med har jeg allerede forsøgt.

Hvad nu hvis jeg fx ikke har nogle timer om tirsdage, så skal den jo udskrive 0 timer tirsdag,

Det vil altså sige at den skal regne sammen for total tid for alle mandage, tirsdage, etc. det med at beregne min løn mm. har jeg allerede klaret.

Det bliver skrevet ind sådan her:
Fold kodeboks ind/udHTML kode 

Vigtig er det at bemærke at det kun er timerne der skal ændre sig efter som jeg tilføjer mine arbejdstider.
Så hvis jeg fx aldrig har arbejdet tirsdag, så skal den jo ændre der hvor der står 2 timer til 0 timer.

(Det HTML jeg har sat ind er hardkodet, altså der er ikke noget php i det endnu)



Så sætter du en variabel inden whileløkken startes og plusser timer til hver gang der bliver kørt en hvis dag igennem.

Det kunne sikkert gøres smartere med nogle arrays og noget foreach, men jeg vil tro dette fungerer (har ikke prøvet det).

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 01.04.2012 10:22 af Bruger #11946
t