Funkcja date - Rozliczanie godzin pracy

0

Cześć, chciałem się do was ponownie zwrócić o pomoc, ponieważ ostatnio mnie super nakierowaliście na rozwiązanie. Mianowicie, potrzebuję stworzyć rozliczanie godzin pracy pracownika. Najprościej byłoby stworzyć tabelę z miesiącami, w której będzie 31 nagłówków i aby pracownik to aktualizował, ale chciałbym aby ta tabela była uzupełniana na koniec danego okresu, a wiadomo po miesiącu nie pamiętamy już ile było godzin na początku miesiąca. Dlatego pomyślałem, aby w tabeli dać tygodnie roku i dni tygodnia:

tydzienroku rok idpracownik poniedzialek wtorek sroda czwartek piatek sobota niedziela akceptacja
2 2019 2 8 8 8 8 7 0 0 Tak
3 2019 2 8 8 0 8 8 0 0 Nie

Tutaj moje pytanie, czy uda mi się zrobić zapytania do bazy, które wyświetlą mi sumę godzin w konkretnym miesiącu ? Np. styczeń 2019 - xx h.

Ma też ktoś propozycję jak zrobić listę select gdzie będą przedziały dat w pozostałych tygodniach tj.

zajęty 2, 3 tydzień 2019 oraz wszystkie powyżej 8 tygodnia
czyli mam listę:

  1. tydzień - 6.01.2019 - 12.01.2019
  2. tydzień - 27.01.2019 - 2.02.2019
  3. tydzień - 3.02.2019 - 9.02.2019
  4. tydzień - 10.02.2019 - 16.02.2019
  5. tydzień - 17.02.2019 - 23.02.2019
  6. tydzień - 24.02.2019 - 2.03.2019
0

Wystaczy tabela składająca się z 4 kolumny:

pracownik_id (unsigned int), dzien (date), liczba godzin (unsigned tinyint), akceptacja (boolean)

Gdzie PK (klucz podstawowy) to kolumny pracownik_id, dzien.

To wystarczy aby wyciągnąć wszystkie dane, przy pomocy funkcji bazodanowych operujących na datach. Nie ma sensu w przypadku tego co chcesz zrobić, tworzyć kolumn na poszczegolne dni tygodnia.

0

A nie lepiej przechowywać to w postaci:
id | employee_id | day | hours
1 | 1 | 2019-12-16 | 8
2 | 1 | 2019-12-17 | 8

A raporty przechowuj w osobnej tabeli
id | employee_id | week_of_year | year | accepted
1 | 1 | 52 | 2019 | 1

A daty dla poszczególnego numeru tygodnia wyciągniesz z drugiej tabeli, manipulując nimi tą funkcją: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_weekofyear

0
kamilg napisał(a):

A nie lepiej przechowywać to w postaci:
id | employee_id | day | hours
1 | 1 | 2019-12-16 | 8
2 | 1 | 2019-12-17 | 8

A raporty przechowuj w osobnej tabeli
id | employee_id | week_of_year | year | accepted
1 | 1 | 52 | 2019 | 1

A daty dla poszczególnego numeru tygodnia wyciągniesz z drugiej tabeli, manipulując nimi tą funkcją: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_weekofyear

Dzięki, zdecydowałem się na takie rozwiązanie :) Co się namęczyłem z formularzami zawierającymi dni w wybranym tygodniu to moje :p Ale warto było, działa super. Mam wybrany tydzień i rok, a dalej wyciągnąłem każdy dzień w tygodniu $poniedziałek, $wtorek itd. Zapytania o Sumy godzin też nie były łatwe ale dało się :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1