Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] Funkcje czasu - najbardziej optymalne rozwiązanie
vokiel
post
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Witam Szanowne Grono!
Tworzę bazę danych do przechowywania informacji o czasie pracy pracowników. Suszę głowę o najlepsze, najbardziej optymalne rozwiązanie.
Chodzi tu głównie o funkcje daty i czasu (szczególnie czasu).
Otóż baza ma przechowywać godziny wejść i wyjść pracowników. Pracownik może opuszczać miejsce pracy kilkukrotnie w ciągu dnia.
Jest tabela z usr i opjce pozostałych:
1.
WEJSCIA
| ID | ID_USR | DATE | TIME |
WYJSCIA
| ID | ID_USR | DATE | TIME |

2.
WEJSCIA
| ID | ID_USR | DATETIME |
WYJSCIA
| ID | ID_USR | DATETIME |

3.
LOGI
| ID | ID_USR | DATETIME_WE | DATETIME_WY |

To takie pierwsze 3 pomysły;)
1. 2. - dają możliwość dodania jakiś info do danej akcji (np spóźnienie, wyjazd na delegację itd) 3 już nie (chociaż można dodać pole UWAGI i tam to opisać;)

Bardzo ważnym elementem jest wyliczenie czasu pracy na każdy dzień, tydzień, miesiąc, rok...

Wyliczenie jest banalne (godzina wyjscia - godzina wejscia) = czas pracy;) Chodzi mi tu o format przechowywania tych dat.
1. Czy lepiej przechowywać oddzielnie date, oddzielnie godziny?
2. Czy czas razem - wtedy jaki format okaże się najlepszy (DATETIME, TIMESTAP)?
2. Czy zapisywać oddzielnie wejscia i wyjścia, czy trzymać to w jednej tabeli?

Wymyśliłem, że można użyć TIMESTAP, dodatkowo ustawić DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, żeby w skrypcie i zapytaniu do bazy mieć jeden element mniej.

Jak się mają typy do wydajności przeliczania.
Bo w wyniku chciałbym np otrzymać tabele z danego dnia:
| Imie nazwisko | godzina wejscia | godzina wyjscia | czas pracy |
Jeśli dane będą przechowywane jako typ time, to 2,3 kolumna pozostaje bez zmian z bazy, tylko trzecią trzeba przerobić np:
SEC_TO_TIME( TIME_TO_SEC( WYJSCIA`.`TIME` ) - TIME_TO_SEC( `WEJSCIA`.`TIME` ) ) AS `CZAS_PRACY`

W przypadku użycia TIMESTAP, czy DATETIME trzeba przeliczać dla wszystkich pól...

Jak różne opcje będą się miały do wielokrotnych wejść? 2 oddzielne tabele - logowanie we/wy sprowadza się do prostego INSERT'a. 1 tabela powoduje, że przy wyjsciach trzeba robic update (Np UPDATE LOGI SET `DATETIME_WY`=now() where ID_USR=1 AND DATETIME_WY IS NULL;)

Co myślicie, może macie własne doświadczenia, pomysły, swoje wypracowane sposoby radzenia sobie w takich sytuacjach?
Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 23.08.2025 - 12:15