peklo
10.09.2015, 11:14:17
witam
Mam takie oto zapytanie, które wyswietla mi nadgodziny dla danego pracownika
SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny
FROM karta kar
INNER JOIN karta_s ser ON kar.id=ser.id_karta
INNER JOIN user us ON us.id=ser.us
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.
kartin
10.09.2015, 11:35:58
Trzeba skonwertować na sekundy, zsumować i skonwertować z powrotem na godziny:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny
FROM karta kar
INNER JOIN karta_s ser ON kar.id=ser.id_karta
INNER JOIN user us ON us.id=ser.us
WHERE us.id=:id
peklo
10.09.2015, 11:42:35
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

A może trzeba to rozbić na dwa zapytania
kartin
10.09.2015, 11:55:02
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ę:
SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny
FROM karta kar
INNER JOIN karta_s ser ON kar.id=ser.id_karta
INNER JOIN user us ON us.id=ser.us
WHERE us.id=:id
UNION
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny
FROM karta kar
INNER JOIN karta_s ser ON kar.id=ser.id_karta
INNER JOIN user us ON us.id=ser.us
WHERE us.id=:id
Ostatni wiersz wyniku będzie sumą nadgodzin.
peklo
10.09.2015, 13: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
ok, a jak zsumować te nadgodziny za pomocą php
nospor
10.09.2015, 13:35:18
Cytat
ok, a jak zsumować te nadgodziny za pomocą php
Normalnie... pobierasz te wartosci po kolei i sumujesz.
peklo
10.09.2015, 13:37:09
próbowałem ale głupoty wychodzą
nospor
10.09.2015, 13:49:59
No przeciez... naprawde nie widzisz ze masz blad w linii 3 swojego kodu? Zamiast xxx masz wstawic yyy
Przenosze
peklo
10.09.2015, 13:57:59
jakie xxx jakie yyy?
nospor
10.09.2015, 14:01:21
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...
kartin
10.09.2015, 14:03:48
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
nospor
10.09.2015, 14:06:27
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...
peklo
11.09.2015, 11:28:15
nie bo teraz skupiam się na czymś innym ,a to tak przy okazji
Kod wygląda mniej więcej tak
try
{
$sql = "SELECT TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') AS nadgodziny,
kar.id karid,ser.id serid
FROM karta kar
INNER JOIN karta_s ser on kar.id=ser.id_karta
INNER JOIN user us on us.id=ser.us
WHERE us.id=:id and ser.godz_powr>:godz_powr
UNION ALL
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC( TIMEDIFF( TIMEDIFF(ser.godz_powr, ser.rozp_pracy), '08:00') ))) AS nadgodziny,
kar.id karid,ser.id serid
FROM karta kar
INNER JOIN karta_s ser on kar.id=ser.id_karta
INNER JOIN user us on us.id=ser.us
WHERE us.id=:id and ser.godz_powr>:godz_powr";
$stmt = $pdo->prepare( $sql );
$stmt -> bindValue(':godz_powr','16:00:00', PDO::PARAM_STR);
$stmt -> bindValue(':id',$id, PDO::PARAM_INT);
$stmt -> execute();
while($row = $stmt -> fetch())
{
$karid = $row['karid'];
if (!isset($dan[$karid])) $dan[$karid] = array('serwisant'=>array
() );
if (!empty($row['serid'])) $dan[$karid]['serwisant'][$row['serid']]= array('nadgodziny'=> $row['nadgodziny'] );
}
foreach ($dan as $id_og => $rows)
{
foreach ($rows['serwisant'] as $serw)
{
}
}
$stmt->closeCursor();
}
catch(PDOException $e)
{
}
i wyświetla mi
5:33
10:13 (SUMA)
gubi natomiast 4:40
nospor
11.09.2015, 11:54:33
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
peklo
11.09.2015, 11:59:07
robiłem coś s stylu "$suma+=$godzina;" i głupoty mi wychodziły
nospor
11.09.2015, 12:28:17
Dlatego juz dawno temu w tym temacie pisalem ci, bys podal kod, jak to robiles. Ale widze po chinsku pisze.
peklo
11.09.2015, 13:37:14
wiem wiem że pisałeś ale z tym próbowałem wczoraj i dałem sobie spokój, a miałem coś takiego:
Ale wyświetla mi tylko pełne godziny bez minut
nospor
11.09.2015, 13:41:03
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.
mar1aczi
11.09.2015, 13:41:47
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.
peklo
11.09.2015, 13:47:03
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
8_pasarzer_NOSTROMO
2.12.2019, 14:12:36
Witam
Podpowie ktoś jak szybko zsumować 2 godziny.
07:30:00 + 04:00:00 = 11:30:00
Robię tak i ciagle wychodzi mi 10:30:00
$a=07:30:00
$b=04:00:00
$sum=$a1+$b1;
echo $suma=date('H:i:s', $sum); // 10:30:00
? why
nospor
2.12.2019, 14:24:09
Zobacz na jakich danych dziala strtotime() oraz na jakich date() i co zwracaja i sie zastanow czy twoj kod ma jakikolwiek sens.... tip: nie ma
Uzyj poprostu explode() i dodaj recznie godziny i minuty i po sprawie.
8_pasarzer_NOSTROMO
2.12.2019, 14:31:12
być może zmylił mnie wynik bliski prawdzie. Ciągle uciekała mi 1 godzina. A czy jest prostszy sposób niż explode ?
nospor
2.12.2019, 14:33:11
A coz skomplikowanego jest w explode po dwukropku?
8_pasarzer_NOSTROMO
2.12.2019, 14:34:40
myślałem że jest jakaś funkcja która to zsumuje bez rozbijania. Dobra poradzę sobie jeśli takiej nie ma.
Tomplus
3.12.2019, 09:05:49
8_pasarzer_NOSTROMO
3.12.2019, 09:30:44
@Tomplus
I to jest odpowiedź jaką naród oczekuje od rządzących. Dzięki kolego.
Kolega @nospor w totalnej opozycji jest, 10 lat tu piszę i 2x pomógł bo się pomylił w głosowaniu. Zaraz mnie wygoni do manuala lub innego debugowania.
nospor
3.12.2019, 09:49:33
@8_pasarzer_NOSTROMO czyli co, dostales linka gdzie za ciebie zrobiono explode i ty juz nie musiales a ja niedobry napisalem tylko ze masz zrobic explode... faktycznie potwor ze mnie :/
8_pasarzer_NOSTROMO
3.12.2019, 12:46:50
@nospor
Oj wybacz ale czasami nie mam czasu na szukanie po manualach skoro ktoś już temat przerobił i ma gotowe rozwiązanie.
Jak syn ma czasami problem z zadaniem z matematyki kl. 5, to szuka w Google gotowego rozwiązania tego zadania, a nie sposobu jego rozwiązania. Ja i wielu innych mamy podobnie. Uwierz mi, że jak mam już kod to nie wklejam go bezmyślnie ino analizuje i dostosowuje do siebie.
nospor
3.12.2019, 12:48:29
Ani razu nie napisales, ze zrobienie explode to jakis problem. Jakbys napisal, ze masz z tym problemy, to bysmy poszli dalej. Milczales, a ja wrozka, wbrew opiniom, nie jestem
Tomplus
3.12.2019, 18:50:28
@Nospor
Wróżka programuszka
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.