Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Plan zajeć (MySQL i operacje na datach)
piotras
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

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


Witam,

zabieram się za aplikację, która będzie służyła do rezerwacji terminów zajęć. Zajęcia odbywają się cyklicznie i trwają przez okres 6 miesięcy.

Osoba zapisuje się na zajęcia w okreslonym dniu tygodnia i o określonej godzinie.

Mam w związku z tym 3 pytania:

1) Czy rejestrując nowego uczestnika zajęć w systemie lepiej w bazie trzymać informacje o wybranym przez niego dniu tygodnia i godziny, czy policzyć wszystkie daty, w ktorych ten dzień występuje) przez całe 6 miesięcy i tak zapisać to w dedykowanej do tego tabeli?

2) Który ze sposobów opisanych wyżej lepiej (łatwiej) nadaje się do sprawdzania kolizji terminów w trakcie rejestracji kolejnego uczestnika?

3) Czy MySQL ma jakąś funkcję, która sprawdza, czy dana data 'zawiera' się w wybranym przedziale czasowym?

Z góry dziękuję za pomoc.

Pozdr
Piotr
Go to the top of the page
+Quote Post
mar1aczi
post
Post #2





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

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


Cytat(piotras)
1) Czy rejestrując nowego uczestnika zajęć w systemie lepiej w bazie trzymać informacje o wybranym przez niego dniu tygodnia i godziny, czy policzyć wszystkie daty, w ktorych ten dzień występuje) przez całe 6 miesięcy i tak zapisać to w dedykowanej do tego tabeli?

Użytkownik zapisując się na kurs będzie do niego przypisany (wiązanie użytkownik<->kurs), a z kolei kurs ma swój rozkład zajęć(?).
Cytat(piotras)
2) Który ze sposobów opisanych wyżej lepiej (łatwiej) nadaje się do sprawdzania kolizji terminów w trakcie rejestracji kolejnego uczestnika?

Dla danego kursu masz limit użytkowników? Sprawdzasz ilu już jest przypisanych i pozwalasz na kolejnego lub nie.
Cytat(piotras)
3) Czy MySQL ma jakąś funkcję, która sprawdza, czy dana data 'zawiera' się w wybranym przedziale czasowym?

between

Ten post edytował mar1aczi 20.02.2013, 15:28:57


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Bardzo często zdarza się, że przy wszelkiego rodzaju rozkładach jazdy, planach zajęć czy ogólnie harmonogramach jakieś pojedyncze zajęcia zostają przesunięte w czasie. Powodów dla tego typu przypadków jest cała masa, święta, niedyspozycyjność prowadzących, konflikt z innymi zajęciami itp. itd. Dlatego też sugerowałbym każde pojedyncze zajęcia zapisywać osobno, a nie jako "wydarzenie cykliczne".
Go to the top of the page
+Quote Post
piotras
post
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

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


hej

Trochę uprościłem pierwszego posta, żeby łatwiej wytłumaczyć.

W rzeczywistości wygląda to tak:

1. Uczestnik może zapisać się do danej grupy
2. Grupa ma określony poziom trudności, czas trwania i liczbę użytkowników
3. Grupa (a nie uczestnik) ma zdefiniowany rozkład zajęć (czyli wiązanie: uczestnik->grupa->kurs)

Czyli jak lepiej? Liczyć wszystkie daty, czy zdefiniować dla grupy dzień tygodnia, godzinę i czas trwania i sprawdzać to w locie?

Jeszcze jedno pytanie abstrahując od powyższego: Jeżeli sprawdzam kolizję zajęć (czy jedno nie nakłada się na drugie) lepiej mieć w bazie datetime rozpoczęcia zajęć i czas trwania, czy datetime rozpoczęcia i zakończenia? Sprawdzając (np funkcją between) chyba lepiej te drugie. Co myslicie?

Pozdrawiam
Piotrek


Cytat(Crozin @ 20.02.2013, 15:34:02 ) *
Bardzo często zdarza się, że przy wszelkiego rodzaju rozkładach jazdy, planach zajęć czy ogólnie harmonogramach jakieś pojedyncze zajęcia zostają przesunięte w czasie. Powodów dla tego typu przypadków jest cała masa, święta, niedyspozycyjność prowadzących, konflikt z innymi zajęciami itp. itd. Dlatego też sugerowałbym każde pojedyncze zajęcia zapisywać osobno, a nie jako "wydarzenie cykliczne".



Zajęcia z powodów technicznych nie mogą zostać przesunięte. Te zajęcia, ktore się nie odbyły dostają status 'do odrobienia'

Czy proponujesz policzyć np wszystkie czwartki o 17.00 i zapisać jako osobne rekordy w bazie?
Go to the top of the page
+Quote Post
mar1aczi
post
Post #5





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

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


Cytat(piotras)
Czyli jak lepiej? Liczyć wszystkie daty, czy zdefiniować dla grupy dzień tygodnia, godzinę i czas trwania i sprawdzać to w locie?

Grupa jest przypisana do konkretnego kursu (jego id) a ten kurs z kolei ma ustalony rozkład zajęć (wiązanie kurs<->harmonogram_zajec) - ja tak bym to widział.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Zajęcia z powodów technicznych nie mogą zostać przesunięte. Te zajęcia, ktore się nie odbyły dostają status 'do odrobienia'
To nadal nie rozwiązuje wszystkich problemów. Powiedzmy, że jakaś grupa ma zajęcia raz w tygodniu, w poniedziałek o 10:00, od września do końca grudnia (ok. 16 zajęć). Co z 11 listopada, który w tym roku wypada właśnie w poniedziałek? Raczej łatwiej będzie Ci pracować z bazą danych, gdzie każde pojedyncze zajęcia są zapisane jako osobny wpis. Wyszukiwanie kolidujących terminów również powinno być dużo prostsze.
Cytat
[...] lepiej mieć w bazie datetime rozpoczęcia zajęć i czas trwania, czy datetime rozpoczęcia i zakończenia?
Zdecydowanie druga opcja. Jednak jeżeli znajdziesz jakiś przypadek, gdzie czas trwania byłby wygodniejszy niż data i czas zakończenia zawsze możesz:
1. Dynamicznie wyliczyć czas trwania jako różnicę czasu zakończenia i rozpoczęcia.
2. Trzymać datę rozpoczęcia i zakończenia oraz czas trwania w bazie. Będziesz jedynie musiał pilnować by aktualizując dane, zachować spójność informacji.
Go to the top of the page
+Quote Post

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 Aktualny czas: 21.08.2025 - 19:41