Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie po średniej
Forum PHP.pl > Forum > Bazy danych > MySQL
deejay4net
Problem jest następujący mamy dwie tabele
pierwsza: arts gdzie mamy artykuły (id i rożne pola mniej ważne i kategoria)

druga
rate gdzie mamy oceny "id,uid,artid,rate"
uid użytkownik , id arta i ocena 1-10

Tera pobierając artykuły chciałbym posortować je względem tabeli rate (plus kategoria) a dokładnie średniej pola rate.
Wiem że należy użyć funkcji AVG do wyliczenia średniej ale dalej pojawia się problem.. gdy skonstruowałem zapytanie pobiera mi tylko jeden rekord (pewnie zła składnia)

  1. SELECT arts.*,rate.rate FROM `arts` arts LEFT JOIN `rate` rate ON rate.artid = arts.id WHERE arts.category ='{$category}' ORDER BY AVG(rate.rate) ASC LIMIT {$from} , {$to}


z góry thx za pomoc smile.gif
thek
Czyli chcesz zrobić coś takiego:
- Wybrać artykuły z określonej kategorii,
- Połączyć wszystkie artykuły z ocenami doń przypisanymi,
- Tak uzyskane krotki artykuł-ocena podzielić na paczki dotyczące określonego artykułu i wyliczyć z nich średnią,
- Posortować po owej średniej.

Popatrz jak to jest zapisane i jakimi słowami a zapewne Ci to podpowie co robić winksmiley.jpg Najważniejsze to użyć odpowiedniej rzeczy w myślniku trzecim. Pomyśl jak uzyskać to "podzielenie na paczki" po artykule. Bo tutaj siedzi meritum Twojego problemu. Myślę, że jesteś na tyle inteligentny, że łatwo się domyślisz, czego brakuje w przytoczonym przez Ciebie zapytaniu. Bo tylko jednej rzeczy Ci brakuje. Na razie bowiem liczy Ci AVG z wszystkich rekordów w bazie i stąd jeden rekord w wyniku. A powinno liczyć średnią dla każdego artykuły w kategorii, który ma jakąś ocenę wystawioną.
deejay4net
Tak myślałem że group by się przyda ;D

oto rozwiązanie skrócone gdyby ktoś inny szukał

  1. SELECT arts.*, AVG(rate.rate) artsrate FROM arts LEFT JOIN rate ON rate.artid = arts.id WHERE arts.category=1 GROUP BY arts.id ORDER BY artsrate DESC


Pominąłem już dzielenie (LIMIT)
dzięki thek za natchnienie smile.gif
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.