Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem relacja wiele do wielu czy to jest mozliwe?
Forum PHP.pl > Forum > PHP
plcm
Witam o to przyklad powiedzmy ze jestesmy na stronie jakiegos gabinetu lekarskiego i jestesmy tam zarejestrowani
na stronie mozna sie zapisac do lekarza do wyboru jest kilku lekarzy i przy kazdym z nich jest do wyboru dzien i godzina ktora nas interesuje
zeby nie komplikowac wszyscy z nich obsluguja w tych samych godzinach

mamy cztery tabele

1) user
- id_user
- imie_user
- nazwisko_user

2) lekarz
- id_lekarz
- imie_lekarz
- nazwisko_lekarz

3) godzina
- id_godzina
- godzina

4) dzien
- id_dzien
- dzien

przykladowe dane w tabelach

1) user

1 - Zbychu - Szybki
2 - Roman - Wolny
3 - Stanislaw - Dziw

2) lekarz

1 - doktora - doka
2 - doktorb - dokb
3 - doktorc - dokc

3) godzina

1 - 8:00
2 - 10:00
3 - 17:00

4) dzien

1 - 22.02.2010
2 - 23.02.2010
3 - 24.02.2010

chcielibysmy po zapisaniu do lekarza moc spr do ktorego lekarza sie zapisalismy na jaki dzien i na ktora godzine

czyli wydaje mi sie ze teraz tabela laczaca powinna wygladac tak

user2lek2dzien2godz

id_user2lek2dzien2godz
id_user
id_lekarz
id_godzina
id_dzien

pytania

1. jak stworzyc kod php ktory bedzie wybieral dane z 3 baz i tworzyl tabele laczaca?
2. jak kod stworzyc aby dane z bazy lekarz byly wyswietlane w formie linku po ktorego nacisnieciu pojawia sie dzien do wyboru i godziny przyjec

czyli mialby sie wyswietlic rekord z tabeli np. doktora - doka ---click---> 22.02.2010 8:00
10:00
17:00 ---click--> zostales zapisany na wizyte .....
23.02.2010 8:00
10:00
3.jak ograniczyc liczbe rekordow w tabeli w tabeli aby na dana godzine nie moglo sie zapisac wiecej niz np 5


prosilbym o pomoc
krowal
Co za głupi pomysł żeby robić tabelę z godzinami i dniami smile.gif Uzasadnij to logicznie a zwrócę Ci honor smile.gif
Do wykonania tego zadania potrzebujesz w zasadzie tylko trzech tabel, dla uproszczenia podam w nich tylko niezbędne pola:

[pacjent]
-id

[lekarz]
-id

[wizyta]
-id_lekarza
-id_pacjenta
-czas_wizyty

Przy dodawaniu rekordów musisz uwzględnić, że żaden pacjent nie może ustawić sobie dwóch wizyt w tej samej godzinie, taka sama zasada dla lekarza, nie może być dwóch pacjentów do jednego lekarza w tej samej godzinie. Zakładamy że wizyta trwa godzinę i 'czas_wizyty' wstawiasz w formacie 'yyyy-mm-dd hh:00:00'. Dzięki temu możesz potem łatwo wybrać wszystkie wizyty danego pacjenta/lekarza w określonym zakresie czasu.
Na takim układzie możesz zrobić w zasadzie wszystko czego potrzebujesz.

Cytat
1. jak stworzyc kod php ktory bedzie wybieral dane z 3 baz i tworzyl tabele laczaca?

Nie robi sie takich rzeczy, tworzenie tabel w locie to wynik złego zaprojektowania aplikacji. Zamiast tego umieszczasz rekordy w tabeli [wizyta]

Cytat
2. jak kod stworzyc aby dane z bazy lekarz byly wyswietlane w formie linku po ktorego nacisnieciu pojawia sie dzien do wyboru i godziny przyjec

Klikasz w link '/wizyta?lekarz=xx' i wyświetlasz tam kalendarz z wszystkimi wizytami wybranego lekarza z możliwością wybrania wolnej godziny. Trzeba trochę pomyśleć smile.gif

Cytat
3.jak ograniczyc liczbe rekordow w tabeli w tabeli aby na dana godzine nie moglo sie zapisac wiecej niz np 5

Nie wiem o co dokładnie Ci chodzi bo chyba nie o to żeby jeden lekarz mógł w danej godzinie przyjąć do 5 pacjentów ? Jakby nie było wystarczy proste zapytanie sql, które policzy ilość zapisanych wizyt dla danego lekarza w danej godzinie lub w wybranym zakresie czasu
  1. SELECT COUNT(*) AS ile_wizyt FROM wizyta WHERE id_lekarza = x AND czas_wizyty = '2012-04-12 12:00:00';
  2. SELECT COUNT(*) AS ile_wizyt FROM wizyta WHERE id_lekarza = x AND czas_wizyty BETWEEN '2012-04-12 12:00:00' AND '2012-04-12 16:00:00';

potem sprawdzasz czy ile_wizyt przekracza limit i jeśli tak to nie pozwalasz na dodanie kolejnego wpisu dla danego lekarza.

To chyba tyle smile.gif
sebastian.rozmus
Tabela z dniami i godzinami była po to żeby wiedzieć kiedy lekarz przyjmuje więc to chyba kluczowa kwestia tego problemu wink.gif

Można to zrobić tak, że tabela rezerwacje ma dane: id, lekarz, pacjent1, pacjent2, ... , pacjent5, dzien, godzina. Wolne terminy to te które nie istnieją w rezerwacjach. Rekord naszej wizyty:
  1. WHERE `pacjent1`={nasze_id} OR `pacjent2`={nasze_id}


Przy rezerwacji sprawdzamy czy choćby jedeno pole( z pacjent1...pacjent5) jest wolne.
krowal
Cytat(sebastian.rozmus @ 13.04.2012, 00:58:17 ) *
Tabela z dniami i godzinami była po to żeby wiedzieć kiedy lekarz przyjmuje więc to chyba kluczowa kwestia tego problemu wink.gif

Można to zrobić tak, że tabela rezerwacje ma dane: id, lekarz, pacjent1, pacjent2, ... , pacjent5, dzien, godzina. Wolne terminy to te które nie istnieją w rezerwacjach. Rekord naszej wizyty:
  1. WHERE `pacjent1`={nasze_id} OR `pacjent2`={nasze_id}


Przy rezerwacji sprawdzamy czy choćby jedeno pole( z pacjent1...pacjent5) jest wolne.

Nie znam założeń tego systemu, ale wydaje się co najmniej dziwnym umawianie pięciu pacjentów na tą samą godzinę, chociaż w naszym kraju wszystko jest możliwe, szczególnie w placówkach służby zdrowia wink.gif Piszecie jakiś projekt na studia czy co ? Mam nadzieję że nie będzie to aplikacja, którą chcecie komuś sprzedać wink.gif
Jeśli lekarze mają bardzo zróżnicowane godziny przyjęć, np nie powtarzają się one w tygodniu czy miesiącu to taka tabela z godzinami przyjęć wydaje się mieć sens. Trzeba by jednak uzupełniać ją na kilka tygodni (miesięcy?) naprzód tak żeby pacjent mógł wiedzieć kiedy może się umówić do danego lekarza. Jeśli są to stali pracownicy to zapewne mają ustalone stałe godziny pracy, wtedy wystarczyła by tabela w której określałoby się zakresy pracy danego lekarza powiedzmy na miesiąc z góry (jeśli godziny dyżurów zmieniają się cyklicznie) lub na stałe dla każdego dnia tygodnia jeśli lekarz ma stałe godziny przyjęć każdego dnia. W każdym wypadku nie wiązałbym tych tabel [wizyta] <> [czas_przyjec] żadnymi relacjami a dane z tabeli zawierającej czasy przyjęć lekarzy wykorzystywał jedynie w celach "informacyjno walidacyjnych" - podczas sprawdzania kiedy pacjent może się zapisać do wybranego lekarza.
sebastian.rozmus
Założenia są opisane w pierwszym poście, nie współtworze tego projektu, tylko czytam ze zrozumieniem. Jakbyś umiał czytać to by Cię 5 pacjentów nie dziwiło

Cytat
Witam o to przyklad powiedzmy ze jestesmy na stronie jakiegos gabinetu lekarskiego i jestesmy tam zarejestrowani


"o to przykład powiedzmy" świadczy o tym, że to tylko teoretyczne przedstawienie problemu.

Cytat
Jeśli lekarze mają bardzo zróżnicowane godziny przyjęć, np nie powtarzają się one w tygodniu czy miesiącu to taka tabela z godzinami przyjęć wydaje się mieć sens.


a jeśli nagle zamiast o 7 i o 8 dojdzie jeszcze godzina 9? Jeśli mamy tabelkę z godzinami wystarczy wtedy dodać jeden rekord.

Cytat
a dane z tabeli zawierającej czasy przyjęć lekarzy wykorzystywał jedynie w celach "informacyjno walidacyjnych" - podczas sprawdzania kiedy pacjent może się zapisać do wybranego lekarza.


Czyli sam sobie odpowiedziałeś po co tabelka z godzinami ;]

Główny problem jest taki, że nadal nie wiemy czy jest to system rezerwacji, czy aplikacja która wyświetla na sztywno dodawane (np. w PA) dane. Jeśli to drugie to dodanie 5-ciu pacjentów jako oddzielne kolumny jest wskazane, jeśli jest to system rezerwacji też można to zrobić, choć będzie to dużo mniej eleganckie, ale za to w łatwy sposób będziesz mógł sprawdzić który termin jest wolny i nie będziesz musiał najpierw zliczać ile jest rekordów na daną godzine.
d3ut3r
Wg mnie wszystko zależy od tego czy jesteśmy w stanie określić ile czasu pacjent spędzi w gabinecie np:

Każdy lekarz ma swoje dyżury czyli tabela dyżury:

id|id_lekarza|data|od|do|

I teraz klient rejestruje się na dany dyżur ale nie konkretną godzinę bo tak naprawdę nie jesteśmy w stanie przewidzieć czy przyjdzie kowalski z przeziębieniem i zbadanie go zajmie 5 minut czy przyjdzie ktoś na kogo będzie trzeba poświęcić 30 minut.

rejestracja

id|id_pacjenta|id_dyzuru

po rejestracji system sprawdza że jest to 10 pacjent zapisany na ten dyżur i drukuje mu numerek do kolejki w poczekalni biggrin.gif


Drugi scenariusz to taki że system jest dla lekarza który ma określoną listę zabiegów i potrafi bardziej zawęzić czas potrzebny na zbadanie pacjenta, wtedy można dodać tabelę zabiegi a usunąć tabelę dyżury:

id|nazwa|czas_trwania(min)

a tabelę rejestracja zrobić w sposób

id|id_pacjenta|data-godzina|id_zabiegu

mając taką tabelę możemy zrobić tak , że pacjent na stronie chce się zarejestrować na badanie USG wiemy że trwa to 15 min, pacjent wybiera 23.04.2012 o godzinie 8:15 system sprawdza czy w tym czasie nie trwa inny zabieg i dopisuje pacjenta lub proponuje najbliższy możliwy termin.

Mogą dojść nam jeszcze np urlopy lekarza, godziny otwarcia kliniki itd. Ale całą logiką ma zająć się skrypt czyli sprawdzamy dzisiejszą datę sprawdzamy od której godziny jest otwarta klinika, którzy lekarze są dostępni i na podstawie tych danych wyświetlamy formularz rejestracji.
plcm
Docelowo system ma dzialac w ten sposob zeby pacjenci byli zapisawni wszyscy (max 5) na ta samą godzine i zakladamy ze lekarze przyjmuja codziennie zawsze o tych samych godzinnach jedyne co sie moze zmienic to pacjent ktory moze zrezygnowac z wizyty i wtedy ilosc wolnych miejsc na dana godzine by sie zwiekszala.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.