Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> sumowanie godzin
peklo
post 10.09.2015, 11:14:17
Post #1





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


witam
Mam takie oto zapytanie, które wyswietla mi nadgodziny dla danego pracownika

  1. SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny
  2. FROM karta kar
  3. INNER JOIN karta_s ser ON kar.id=ser.id_karta
  4. INNER JOIN user us ON us.id=ser.us
  5. WHERE us.id=:id


W wyniku czego otrzymuję coś mniej więcej takiego
5:33
4:40
dla pracownika np: Kowalski
Potrzebuję w tym zapytaniu jeszcze sumowania tych godzin czyli na końcu wyniku 10:13.
Go to the top of the page
+Quote Post
kartin
post 10.09.2015, 11:35:58
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Trzeba skonwertować na sekundy, zsumować i skonwertować z powrotem na godziny:
  1. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny
  2. FROM karta kar
  3. INNER JOIN karta_s ser ON kar.id=ser.id_karta
  4. INNER JOIN user us ON us.id=ser.us
  5. WHERE us.id=:id


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
peklo
post 10.09.2015, 11:42:35
Post #3





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


ale tym zapytaniem otrzymam wyszczególnione godziny + ich suma ponizej? Czy tylko sume? Bo może źle się wyraziłem ale potrzebuje tego i tego smile.gif
A może trzeba to rozbić na dwa zapytania

Ten post edytował peklo 10.09.2015, 11:49:25
Go to the top of the page
+Quote Post
kartin
post 10.09.2015, 11:55:02
Post #4





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Jak bardzo potrzebujesz wyszczególnionych godzin oraz ich sumy zwróconych w jednym zapytaniu to użyj UNION do poszczególnych nadgodzin dołączając ich sumę:
  1. SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny
  2. FROM karta kar
  3. INNER JOIN karta_s ser ON kar.id=ser.id_karta
  4. INNER JOIN user us ON us.id=ser.us
  5. WHERE us.id=:id
  6. UNION
  7. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny
  8. FROM karta kar
  9. INNER JOIN karta_s ser ON kar.id=ser.id_karta
  10. INNER JOIN user us ON us.id=ser.us
  11. WHERE us.id=:id
Ostatni wiersz wyniku będzie sumą nadgodzin.


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
peklo
post 10.09.2015, 13:33:29
Post #5





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


no tak ostatni wiersz wyniku. Teraz otrzymuje coś takiego

5:33
10:13

gubi mi 4:40. No chyba że coś źle robie

ok, a jak zsumować te nadgodziny za pomocą php
Go to the top of the page
+Quote Post
nospor
post 10.09.2015, 13:35:18
Post #6





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
ok, a jak zsumować te nadgodziny za pomocą php
Normalnie... pobierasz te wartosci po kolei i sumujesz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 10.09.2015, 13:37:09
Post #7





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


próbowałem ale głupoty wychodzą

Ten post edytował peklo 10.09.2015, 13:40:54
Go to the top of the page
+Quote Post
nospor
post 10.09.2015, 13:49:59
Post #8





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




No przeciez... naprawde nie widzisz ze masz blad w linii 3 swojego kodu? Zamiast xxx masz wstawic yyy

Przenosze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 10.09.2015, 13:57:59
Post #9





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


jakie xxx jakie yyy?
Go to the top of the page
+Quote Post
nospor
post 10.09.2015, 14:01:21
Post #10





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




O zobacz, ty też na podstawie kodu, ktorego nam nie pokazales a z ktorym masz problem, tez nie mozesz dojsc o jakie xxx i jakie yyy chodzi? No zobacz, to jest nas dwoch...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kartin
post 10.09.2015, 14:03:48
Post #11





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Cytat(peklo @ 10.09.2015, 14:57:59 ) *
jakie xxx jakie yyy?
Widać ma awarię szklanej kuli i dlatego, źle odgadł gdzie masz błąd.

Cytat(peklo @ 10.09.2015, 14:33:29 ) *
no tak ostatni wiersz wyniku. Teraz otrzymuje coś takiego

5:33
10:13

gubi mi 4:40. No chyba że coś źle robie
Dokładnie. Coś robisz źle. Niestety nie wiadomo co, bo nie pokazałaś jak robisz, a mało kto ma działającą szklaną kulę.
Wpisz sobie zapytanie bezpośrednio w jakimś kliencie MySQL (np. phpMyAdmin) i zobaczysz, że dostaniesz wszystkie wyniki. Na wszelki wypadek dodaj ALL po UNION, bo możesz mieć w kilku dniach ten sam czas nadgodzin.

Cytat(peklo @ 10.09.2015, 14:33:29 ) *
ok, a jak zsumować te nadgodziny za pomocą php

http://lmgtfy.com/?q=PHP+how+to+sum+times


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
nospor
post 10.09.2015, 14:06:27
Post #12





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
Widać ma awarię szklanej kuli i dlatego, źle odgadł gdzie masz błąd.
Kula w naprawie, wrozylem z fusów... ale to z wczorajszych, bo nie mialem swiezych... to pewnie dlatego źle odgadlem... wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 11.09.2015, 11:28:15
Post #13





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


nie bo teraz skupiam się na czymś innym ,a to tak przy okazji

Kod wygląda mniej więcej tak

  1. try
  2. {
  3. $sql = "SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny,
  4. kar.id karid,ser.id serid
  5. FROM karta kar
  6. INNER JOIN karta_s ser on kar.id=ser.id_karta
  7. INNER JOIN user us on us.id=ser.us
  8. WHERE us.id=:id and ser.godz_powr>:godz_powr
  9. UNION ALL
  10. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny,
  11. kar.id karid,ser.id serid
  12. FROM karta kar
  13. INNER JOIN karta_s ser on kar.id=ser.id_karta
  14. INNER JOIN user us on us.id=ser.us
  15. WHERE us.id=:id and ser.godz_powr>:godz_powr";
  16. $stmt = $pdo->prepare( $sql );
  17. $stmt -> bindValue(':godz_powr','16:00:00', PDO::PARAM_STR);
  18. $stmt -> bindValue(':id',$id, PDO::PARAM_INT);
  19. $stmt -> execute();
  20.  
  21. $dan = array();
  22. while($row = $stmt -> fetch())
  23. {
  24. $karid = $row['karid'];
  25. if (!isset($dan[$karid]))
  26. $dan[$karid] = array('serwisant'=>array()
  27. );
  28. if (!empty($row['serid']))
  29. $dan[$karid]['serwisant'][$row['serid']]= array('nadgodziny'=> $row['nadgodziny']
  30. );
  31. }
  32. foreach ($dan as $id_og => $rows)
  33. {
  34.  
  35. foreach ($rows['serwisant'] as $serw)
  36. {
  37. echo date("G:i",strtotime($serw['nadgodziny']) );
  38. }
  39. }
  40. $stmt->closeCursor();
  41. }
  42.  
  43. catch(PDOException $e)
  44. {
  45. echo 'error';
  46. }


i wyświetla mi
5:33
10:13 (SUMA)

gubi natomiast 4:40

Ten post edytował peklo 11.09.2015, 11:38:06
Go to the top of the page
+Quote Post
nospor
post 11.09.2015, 11:54:33
Post #14





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




To linijka
if (!empty($row['serid']))

$dan[$karid]['serwisant'][$row['serid']]= array('nadgodziny'=> $row['nadgodziny']

);


nadpisujesz godzine przez sume, ktora to suma ma identyczny serid. Albo w union nadaj jej recznie serid na chociazby 0 czy na cos co nie wystepuje,
albo wywal te union i licz te sume recznie w php... nie ogarniam jaki problem zrobic dla ciebie $suma+=$godzina;
Mnozysz niesamowicie problemy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 11.09.2015, 11:59:07
Post #15





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


robiłem coś s stylu "$suma+=$godzina;" i głupoty mi wychodziły
Go to the top of the page
+Quote Post
nospor
post 11.09.2015, 12:28:17
Post #16





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Dlatego juz dawno temu w tym temacie pisalem ci, bys podal kod, jak to robiles. Ale widze po chinsku pisze.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 11.09.2015, 13:37:14
Post #17





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


wiem wiem że pisałeś ale z tym próbowałem wczoraj i dałem sobie spokój, a miałem coś takiego:

  1. $suma+=date("G:i:s",strtotime($serw['nadgodziny']) );
  2. echo $suma;

Ale wyświetla mi tylko pełne godziny bez minut
Go to the top of the page
+Quote Post
nospor
post 11.09.2015, 13:41:03
Post #18





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




1) Jakis czas temu w innym temacie miales kod w php, ktory dodaje godziny w twoim formacie. To jego masz uzyc do dodawania.
2) Jakis czas temu, w innym temacie pisalem ci, bys godziny trzymal w sekundach a nie w durnym formacie. Nie posluchales i teraz bez sensu sie bujasz z pierdulami. Na Twoje wlasne zyczenie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mar1aczi
post 11.09.2015, 13:41:47
Post #19





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


W php wartość dla godzin sumujesz normalnie. Minuty sumujesz i: suma minut dzielona przez 60 i wartość całkowitą dodajesz do godzin; suma minut modulo 60 i masz pozostałe minuty.

Ten post edytował mar1aczi 11.09.2015, 13:43:33


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
peklo
post 11.09.2015, 13:47:03
Post #20





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


o tych sekundach nospor to pamiętałem ale za duż musiałbym wcześniej zmieniać więc wybrałem inne rozwiązanie, no a teraz się z tym bujam niestety
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 14:52