![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 19.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
wydaje mi się, że dość klasyczny problem. Mam dwie tabele: News (id, tresc) 1, 'bla bla bla' 2, 'bla bla bla bla bla' Oceny_News(id, id_News, ocena) 1, 1, 1 2, 1, 4 3, 1, 5 chciałbym połączyć obe tebele i wypisać treść newsa wraz ze średnią oceną:
zapytanie pisane z ręki, po to, aby pokazać o co mi chodzi. Problem polega na tym, że jeżeli jakiś news nie ma oceny (w tym wypadku news 2) to wtedy, nie zostanie wypisany. Jak zrobić, żeby wypisało mi tego newsa nwet wtedy, gdy nie ma żandej oceny, i wtedy z oceną np. 6(wychodząca poza skalę 1-5) podobnie jest, gdy chcę wypisać newsa z ilością komentarzy- jeżeli nie ma komentarzy, to się nie wypisze. Wiem, że można wykonać to polecenie za pomocą paru selektów, ale czy jest sens robić pojedyńczego selekta dla każdego newsa w bazie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Baza danych MySQL tak (w sumie dotyczy to wszystkich).
1. [url=http://dev.mysql.com/doc/refman/5.0/en/join.html]LEFT JOIN[url] zamiast JOIN. 2. srednia_ocena będzie miała wartość NULL, w przypadku gdy artykuł nie ma żadnej oceny. 3. Dla celów optymalizacyjnych powinieneś mieć w tabeli News kolumnę srednia_ocena, w której przy dodaniu/usunięciu oceny zapisywałbyś aktualny stan oceny - uprościłoby to zapytania SELECT o brak tego jednego JOIN i AVG(), które jedynie niepotrzebnie obciążają bazę danych. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 08:01 |