![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 262 Pomógł: 3 Dołączył: 18.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam.
2 dni temu walczyłem z jednym podzapytaniem i mi się udało. Niestety w momencie, kiedy dodaje drugie podzapytanie mysql bije wszelkie rekordy w długości zapytań mam taką tabelę:
Łączącą pacjenta z lekarzem, który się nim opiekuje. Oczywiście może występować sytuacja, kiedy jeden pacjent "przypisany" jest do więcej niż jednego lekarza. Na to znalazłem sposób:
Ale w momencie kiedy mam sytuację, ze jednej pacjent jest pod opieką więcej niż dwóch lekarzy wówczas zaczyna się problem. Idąc za taką logiką rozumowania zrobiłem następujące pytanie:
tutaj niestety już jest poważny problem, bo pytanie wykonuje się ponad 80 s. Oczywiście jest to niedopuszczalne. Zresztą nie było pożądanego efektu. Kombinowałem z IFem, gdzie 4 kolumna miała wyglądać następująco
ale to też niestety na nic. Kiedy dodaje group by id_pac w tym podzapytaniu, pytanie wykonywało się w nieskończoność zresztą bezskutecznie. Potrzebuję zrobić zapytanie gdzie będzie mi sprawdzał do 5 lekarzy u pacjentów. Nie chodzi mi oczywiście o rozwiązanie tylko o pomoc gdzie można jeszcze szukać lub gdzie popełniam błąd w rozumowaniu |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
W takiej sytuacji widzę, że mamy tabelę n-n... Teraz musimy określić CO chcesz z tego złączenia wyciągnąć. Jeśli tylko id lekarzy, to kombinujesz jak koń pod górkę (IMG:style_emoticons/default/smile.gif) Najprościej wtedy wziąć tabelę łaczącą lek_pac i złaczyć ją z tabelą lekarzy oraz użyć GROUP BY id_pac a w części select to co nas interesuje pobrać do kolumny w której uzyjemy GROUP_CONCAT na tym co chcemy.
EDIT: W zasadzie jeśli pokombinujesz chwilkę, to używając GROUP_CONCAT i konkatenacji stringów, możesz w ten sposób jednym zapytaniem wyciągnąc co chcesz.. Zarówno dane pacjenta, jak i dane jego lekarzy... Dla całej bazy (IMG:style_emoticons/default/smile.gif) Wtedy łącząca będzie bazą główną i zrobisz join na pacjentów, potem join na lekarzy, całość pogrupować po pacjentach, a do tego ładnie w select group_concat. Powinna całość drastycznie przyspieszyć jeśli jeszcze masz sensowne indeksy. PS... I bonusem... int(3) nie oznacza, że to pole jest 3-cyfrowe czyli od 0 do 999. Ale co oznacza to już sam się dowiedz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 21:44 |