Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PHP / MySQL - Suma elementów pętli (czas).

sharminte 16 Lut 2016 19:50 696 14
  • #1 16 Lut 2016 19:50
    sharminte
    Poziom 5  

    Dysponuję takim oto fragmentem kodu.

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Jak (logicznie) powinienem sformułować pętlę aby wyliczała mi ona wartość zmiennej $dteDiff zawartej w pętli?

    Czy jestem w stanie przerobić zapytanie w taki sposób aby wyświetlało mi tylko rekordy tylko dla danego miesiąca ?

    0 14
  • #2 16 Lut 2016 19:59
    drobok
    Poziom 28  

    Co do pytania nr1, co ma wyliczyć ? Opisz / dodaj obrazek / jakiś przykład
    Co do pytania nr2, nie podałeś jak wygląda twoja baza danych (pola, typy, co w nich zapisujesz)

    PS Niepotrzebnie mieszasz programowanie obiektowe ze strukturalnym, poza tym teraz używa się PDO, a SELECT * jest mało optymalne

    0
  • #3 16 Lut 2016 20:08
    sharminte
    Poziom 5  

    1. rzuty ekranu z formatem bazy oraz wyświetlanego zestawienia.

    PHP / MySQL - Suma elementów pętli (czas). PHP / MySQL - Suma elementów pętli (czas). PHP / MySQL - Suma elementów pętli (czas).

    2. Chcę aby sumowana była wartość kolumny Czas Pracy.

    rzut bazy jest niecostarszy, pole czas w niej nie występuje :)

    --- EDIT ---
    zamieściłem również świeży screen z typami pól w bazie :)

    0
  • #4 16 Lut 2016 20:52
    drobok
    Poziom 28  

    Dlaczego w każdym polu `czas` masz wartość NULL ? Mógłbyś wykorzystać tą kolumnę by przeliczyć wartość przy zapisie czasu wyjścia i nie przeliczać tej wartości z każdym wyświetleniem.

    Trzymanie każdego pracownika w osobnej tabeli mija się z celem. Tak samo jak trzymanie daty i czasu w dwóch osobnych kolumnach.

    @1, przed pętlą daj:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    a przed
    Kod: php
    Zaloguj się, aby zobaczyć kod

    daj
    Kod: php
    Zaloguj się, aby zobaczyć kod

    Wyświetlisz to za pomocą np:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    @2
    Kod: sql
    Zaloguj się, aby zobaczyć kod

    0
  • #5 16 Lut 2016 22:49
    sharminte
    Poziom 5  

    co do punktu pierwszego, zrobiłem dokładnie tak jak mówiłeś ale otrzymuję dziwne wyniki:

    dla użytkownika który nie ma żadnych wejść zapisanych otrzymuję coś takiego:
    PHP / MySQL - Suma elementów pętli (czas).

    a dla użytkownika z wejściami taki oto wynik:
    PHP / MySQL - Suma elementów pętli (czas).

    0
  • #6 17 Lut 2016 11:00
    sharminte
    Poziom 5  

    rozwiązałem swój problem, (w trochę niecodzienny sposób) aczkolwiek liczy się efekt, mam teraz z kolei inny problem ;D

    1. pobieram wartości dla danej tabeli z bazy.
    2. z poziomu PHP'a wyliczam czas pracy.
    3. wynik zapisuje do zmiennej i zamykając ją w pętli While generuje zapytanie do bazy które robi UPDATE kolumny `czas` (utworzonej niedawno na potrzeby problemu) i wprowadza wynik w odpowiednią komórkę.
    4. za pomocą SUM() pobieram sumę czasów.

    i tu się rodzi problem :D

    jeżeli suma wynosi powiedzmy 60:34:25, funkcja SUM() zwraca mi wynik w postaci 603425, w jaki sposób teraz mogę przerobić to aby wyświetliło mi to poprawnie(tj. oddzielone ':'), zapewne wykorzystać należałoby pętlę tylko jak ją logicznie sformułować ? :)

    0
  • #7 17 Lut 2016 11:14
    marcinj12
    Poziom 40  

    Ja tylko chciałem zauważyć, że np. dla wpisu 2 różnica pomiędzy 2016-02-16 23:03 a 2016-02-17 05:33 wynosi ok. 6:30 godz., a nie 17:59 jak Ci skrypt obliczył. Coś masz tam nie tak.

    0
  • #8 17 Lut 2016 11:51
    sharminte
    Poziom 5  

    ogólnie to sobie już troche namieszałem :D muszę rozkminić jakiś (POPRAWNY) sposób na zliczanie wartości czasu pracy i do tego właściwie zrobić UPDATE dla kolumny czas bo na chwilę obecną to wypełnia mi on całą kolumnę 1 wartością a nie o to mi chodziło :) ale do tego siądę jak wrócę z uczelni :)

    0
  • #9 17 Lut 2016 11:56
    marcinj12
    Poziom 40  

    Pewnie nie podałeś warunku WHERE zawężającego zapytanie do jednego rekordu...

    0
  • Pomocny post
    #10 17 Lut 2016 12:09
    drobok
    Poziom 28  

    Masz rację, nie pomyślałem - powinieneś policzyć różnicę czasu od początku do twojej sumy.
    Spróbuj coś takiego:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #11 17 Lut 2016 15:33
    sharminte
    Poziom 5  

    generalnie liczy teraz ok, ale jest pewien problem jeżeli suma przekracza 24h (czyli wynosi np. 24h 1min 10sek) to wyświetli mi 00:01:10. coś jest chyba jeszcze nie tak z formatem. Jeszcze gdyby to chociaż pokazywało ilość dni skoro się zeruje o na 24h byłoby genialnie a tak to nie mam pojęcia jak to ugryźć :D bo z tego co widzialem w manualu dla formatu czasu nie znalazlem tam nic co by pozwalalo na wyswietlenie ilosci dni :(

    0
  • #12 17 Lut 2016 16:23
    drobok
    Poziom 28  

    Taki urok metody diff (a raczej typu dateinterval), możesz zrobić coś takiego jeśli chcesz mieć same godziny:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Jednak wtedy musisz minuty dopisać osobno
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #13 17 Lut 2016 16:38
    sharminte
    Poziom 5  

    nie bardzo akurat tutaj rozumiem ten fragment, on ilość dni czyt. 'days' przechowuje gdzieś w pamięci ?

    domyślam się że to miało być wklejone w miejsce tego:

    Cytat:

    $sumdiff->diff($st)->format('%H:%I:%S');


    jednak czy wklejając tak jak podesłałeś, czy zmieniając zmienną $diff na $sumdiff (w ramach testu ponieważ $diff wcześniej nigdzie nie wystąpiło) wyświetla mi wartość 0. Nie wiem czy ja coś już spierniczyłem czy już po nocce po prostu jestem tak styrany, że najprostsze czynności mi nie idą :D

    0
  • Pomocny post
    #14 17 Lut 2016 16:55
    drobok
    Poziom 28  

    diff to zmienna tymczasowa. Po prostu poprawia czytelność.
    Zamień w/w linię na:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #15 17 Lut 2016 17:17
    sharminte
    Poziom 5  

    dzięki wielkie :D działa :)

    0
  Szukaj w 5mln produktów