![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam taką baze z dwóch tabel na których uczę się podstaw i złączeń Patient: id, first_name, last_name Exam: id, patient_id(klucz obcy), opis, date Potrafię zrobić zapytanie, które wyliczy którzy pacjenci mają najwięcej badań:
... ale jak ograniczyć teraz wynik tylko do tych którzy mają więcej niż 2 badania? Z góry dzięki Ten post edytował Jozjasz 23.08.2012, 14:35:39 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Skoro się uczysz, to warto byłoby od razu na początku uczyć się porządnych zapytań. W swoim pierwszym grupujesz po patient_id, czyli dla każdego pacjenta będziesz miał co najwyżej jeden rekord, jakiego więc wyniku oczekujesz w kolumnie opis? Przecież ten opis dotyczy jednego, konkretnego badania. Mysql w domyślnej konfiguracji taką składnię przyjmie, ale według standardu sql jest ona błędna. W tym przypadku first_name i last_name będą jeszcze poprawne, bo w kazdej grupie wszystkie są takie same, ale opis już będzie nieokreślony - mysql wypluje pierwszy z brzegu, który będzie miał pod ręką.
Proponuję poczytać: http://dev.mysql.com/doc/refman/5.5/en/gro...en-columns.html Prawidłowe zapytanie powinno wyglądać tak:
Takie zapytanie jest nie tylko poprawne, ale też bardziej wydajne, przy założeniu indeksu na patient_id w tabeli exam, ale ogólnie zewnętrzne klucze do innych tabel zawsze powinny być indeksowane. Co prawda przy małej bazie różnicy nie będzie, ale warto wyrobić sobie dobre nawyki. Łączenie kilku tabel i grupowanie po całości musi być wolniejsze, na połączonych tabelach nie ma możliwości wykorzystania indeksów do pomocy w grupowaniu, indeksy działają tylko w obrębie danej tabeli. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:31 |