Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]długo wykonujące się podzapytanie cz. 2
jacusek
post
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ę:
  1. CREATE TABLE `lek_pac` (
  2. `id_pow` INT(10) NOT NULL AUTO_INCREMENT,
  3. `id_pac` INT(3) NOT NULL,
  4. `id_lek` INT(3) NOT NULL,
  5. PRIMARY KEY (`id_pow`),
  6. INDEX `id_pac` (`id_pac`),
  7. INDEX `id_lek` (`id_lek`)
  8. )
  9. COLLATE='utf8_general_ci'
  10. ENGINE=MyISAM
  11. ROW_FORMAT=DEFAULT
  12. AUTO_INCREMENT=0

Łą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:
  1. SELECT id_pac,id_lek lekarz1,
  2. (SELECT id_lek FROM lek_pac WHERE id_lek !=(lekarz1) HAVING count(id_pac)>1) lekarz2
  3. FROM
  4. (SELECT * FROM lek_pac GROUP BY id_pac HAVING count(id_pac)>1) AS t2

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:
  1. SELECT id_pac,
  2. id_lek lekarz1,
  3. (SELECT id_lek FROM lek_pac WHERE id_lek !=(lekarz1) HAVING count(id_pac)>1) lekarz2,
  4. (SELECT id_lek FROM lek_pac WHERE id_lek NOT IN(lekarz1,lekarz2) HAVING count(id_pac)>1) lekarz3
  5. FROM
  6. (SELECT id_lek,id_pac FROM lek_pac GROUP BY id_pac HAVING count(id_pac)>1) AS t2

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
  1. (SELECT (IF(id_lek NOT IN(lekarz1,lekarz2),id_lek,NULL)) FROM lek_pac HAVING count(id_pac)>2) lekarz3

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jacusek
post
Post #2





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


siedzę już i kombinuję z tym co napisałeś i nic niestety mi nie wychodzi. Mógłbyś ewelntualnie podać jakiś przykład.

ja wymyśliłem na razie coś takiego, co właściwie mi nic nie daje niestety. Poza mozliwością znalezienia konkretnych pacjentów będących pod opieką więcej niż jednego lekarza. Dalej nie wiem jak to ugryźć. (IMG:style_emoticons/default/sciana.gif)
  1. SELECT id_pac,
  2. group_concat(id_lek ORDER BY id_lek DESC) lekarz2 FROM lek_pac
  3. GROUP BY id_pac
  4. HAVING count(id_pac)>1


Czy ewentualnie jakiś przykład gdzie mogę to użyć w inny sposób

Go to the top of the page
+Quote Post

Posty w temacie


Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 02:34