Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: gdy artykuł nie ma ocen, to się nei wyświetla
Forum PHP.pl > Forum > Bazy danych
adelura
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ą:
  1. SELECT
  2. n.id,
  3. n.tresc,
  4. avg(o.ocena) AS srednia_ocena
  5. FROM News AS n
  6. JOIN Oceny_News AS o ON n.id = o.id_News
  7. GROUP BY n.id
  8. ORDER BY srednia_ocena ASC


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?
Crozin
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.