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

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: 23.08.2025 - 01:58