Witam wszystkich!!!
Bardzo proszę o podpowiedź jak to zrobić.
Buduję stronke w php i mysql, która ma min. umozliwić klientowi zarejestrowanie się przez internet a nastepnie po zalogowaniu zapisanie się na wizytę np. do dyrektora w jakiejś sprawie...
system jednak ma sam zaproponować dzień i godzinę wizyty...
Bardzo proszę o pomoc.
Pozdrawiam
Na jakiej podstawie system ma proponowac termin wizyty?
johny_bravo napisał(a)
Na jakiej podstawie system ma proponowac termin wizyty?
To ma wygladać tak...
ja zapisuje się przez internet
podaję temat, treść sprawy i wybieram z tabeli mysql rodzaj sprawy
Nastepnie po wcisnięciu przyciusku "zapisz się" chcę aby mi się wyświetlił komunikat, że zostałem zapisany na wizytę w dniu.... o godz. ..... ( np. w godzianch 8.00-16.00)
Nie wiem czy robić to na bazie tabeli w mysql… czy w samym php?
Jestem początkujący w tej dziedzinie niestety
Nie o to mi chodzilo. Na jakiej podstawie normalnie wyznaczane sa terminy wizyty? Np. przychodze do firmy, podchodze do pani przy biurku i mowie, ze chcialbym sie umowic. Na jakiej podstawie zaproponuje mi ona odpowiednie godziny?
//edit
Dodatkowe pytania:
- Czy czas trwania wizyty jest ustalony?
- Jesli nie to jak ustalac czas wizyty?
- Czy sa przerwy miedzy wizytami?
johny_bravo napisał(a)
Nie o to mi chodzilo. Na jakiej podstawie normalnie wyznaczane sa terminy wizyty? Np. przychodze do firmy, podchodze do pani przy biurku i mowie, ze chcialbym sie umowic. Na jakiej podstawie zaproponuje mi ona odpowiednie godziny?
//edit
Dodatkowe pytania:
- Czy czas trwania wizyty jest ustalony?
- Jesli nie to jak ustalac czas wizyty?
- Czy sa przerwy miedzy wizytami?
czas wizyty 15 min.
przerwy miedzy spotkaniami 5 minut
Tak podchodzę do okienka, mówię, ze chcę się zapisać i Pani mnie zapisuje, podstawą do zaproponowania godzin jest czas otwarcia urzędu... ( nie chce już wchodzic w szczegóły bo to by pewnie bardziej skomplikowalo sprawę, ze np są 3 dni w tygodniu w których interesanci są przyjmowani w godzniach np. 8.00-12.00)
No juz w miare jasne.
Ja bym to zrobil tak (mniej wiecej, jest dosc pozno ;) ):
- Tabela appointments:
create table appointments
(
id int primary key auto_increment,
day date not null,
start_stamp int not null,
visitor_id int not null
)
- Tabela visitors przechowujaca dane rejestrujacej sie osoby.
Teraz potrzebujesz procedurki, ktora na dany dzien wyciagnie wolne terminy. kolumna start_stamp moglaby byc typem czasowym (bo tak jest naturalnie), ale to komplikowaloby sprawe przy zapytaniach. Usprawnieniem moze byc takie rozwiazanie, korzystajac z tego, ze struktura spotkan jest ustalona:
- tabela office_hours (godziny urzedowania)
create table office_hours
(
day int not null,
start_stamp int not null,
primary key(day, start_stamp)
)
W tej tabeli zaznaczasz jakie godziny w danym dniu uznawane sa za godziny przyjec. start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut (15 minut wizyta + 5 minut przerwy) by uzyskac wlasciwy czas wizyty. Przykladowo:
day | start_stamp
1 24
1 25
1 26
oznacza, ze w poniedzialek (umowny 1 dzien) godziny przyjec ustalone sa na 8.00-9.00. 24 oznacza 24 z kolei interwal 20 minutowy (liczone dla ulatwienia od polnocy - czyli 8*3 interwaly mieszczace sie w godzinie). Zatem 24 to godzina 8.00-8.15, 25 to 8.20-8.35, 26 to 8.40-8.55.
Ten sam start_stamp wstawiasz do tabeli appointments by oznaczyc termin jako zajety.
Teraz sprawa jest prosta - wyciagniecie wolnych terminow na dany dzien to:
select start_stamp from office_hours where day = x and start_stamp not in (select start_stamp from appointments where date = date(now()))
W ten sposob otrzymujesz numery oznaczajace wolne terminy, w tym formacie liczbowym, ktory opisalem powyzej. Poniewaz interwal to 20 minut czyli 1/3 godziny latwo przeliczyc: liczba/3 to godzina, liczba%3*20 to minuta rozpoczecia wizyty.
Sposob troche zagmatwany, ale umozliwia duza swobode. Jesli bedziesz tworzyl do tego administracje godzin urzedowania to dostajesz gotowe narzedzie do reki - wystarczy wpisac odpowiednie wartosci w tabele office_hours i jestes w domu.
//edit
Jezeli rejestracja odbywa sie do roznych gabinetow wystarczy lekka modyfikacja tabel (dodanie np. room_id).
Disclaimer - podany kod moze byc niezgodny z dialektem MySQL, nie chcialo mi sie dokladnie sprawdzac ;) Zapytania nie musza zatem dzialac od razu po wklejeniu, ale idea powinna byc wlasciwa.
johny_bravo napisał(a)
No juz w miare jasne.
Bardzo dziekuję za poświęcony mi czas i za jakis punkt zaczepienia... posiedze nad tym i mam nadzieję, że mi się uda... potrzebne mi to do pracy mgr... a do oddania już tylko miesiąc... Wiszę Ci piwo :-) (jesli lubisz)
pozdrawiam
M.
johny_bravo napisał(a)
...
- tabela office_hours (godziny urzedowania)
create table office_hours
(
day int not null,
start_stamp int not null,
primary key(day, start_stamp)
)W tej tabeli zaznaczasz jakie godziny w danym dniu uznawane sa za godziny przyjec. start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut (15 minut wizyta + 5 minut przerwy) by uzyskac wlasciwy czas wizyty. Przykladowo:
day | start_stamp
1 24
1 25
1 26oznacza, ze w poniedzialek (umowny 1 dzien) godziny przyjec ustalone sa na 8.00-9.00. 24 oznacza 24 z kolei interwal 20 minutowy (liczone dla ulatwienia od polnocy - czyli 8*3 interwaly mieszczace sie w godzinie). Zatem 24 to godzina 8.00-8.15, 25 to 8.20-8.35, 26 to 8.40-8.55.
....
Nie rozumiem tego fragmentu. Może ktoś mi wytłumaczy, bo wydaje się to być fajne i ciekawe rowiazanie.
Co to znaczy:
- start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut ?
- 24 oznacza 24 z kolei interwal 20 minutowy ?
Innymi slowy start_stamp to numer wyrazu takiego ciagu:
{00:00, 00:20, 00:40, 01:00, ...}. Czyli 24 wyraz tego ciagu to godzina 8:00. 3 kolejne wyrazy to odstep godziny, 1 to 20 minut. Dzieki temu KAZDY mozliwy termin wizyty (co 20 minut) ma naturalnie przyporzadkowany numer. Co znacznie ulatwia wyznaczenie nieprzyporzadkowanych nigdzie numerow - czyli wolnych terminow.