Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Liczenie średniej z wykorzystaniem LEFT JOIN, Jak zmodyfikować poniższe zapytanie
Aztech
post
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Mam zapytanie wyliczające średnie zdobycze punktowe dla zawodników (zawodnik raz może być gościem raz gospodarzem) w pojedynkach pomiędzy różnymi osobami.
  1. // najwieksze srednie zdobycze punktowe
  2. $sql = 'SELECT td1.HostID, td1.HostName, AVG( td1.HostPoints ) AS AHP, AVG( td2.GuestPoints ) AS AGP, ( ( SUM( td1.HostPoints ) + SUM( td2.GuestPoints ) ) / ( Count( td1.HostID ) + Count( td2.GuestID ) ) ) AS Srednia'
  3. . '
  4. FROM tournamentsdata AS td1'
  5. . ' LEFT JOIN tournamentsdata AS td2 ON td1.HostID = td2.GuestID'
  6. . ' GROUP BY td1.HostID'
  7. . ' ORDER BY Srednia DESC '
  8. . ' LIMIT 15 ';
  9. $res_big_sr = mysql_query($sql, $link);


PYTANIE: Jak zmodyfikować to zapytanie aby liczona była średnia z dokładnie ostatnich 50 pojedynków? Dodatkowy warunek, jeśli zawodnik nie rozegrał jeszcze 50 pojedynków średnia nie będzie mu policzona.

UWAGA:
chciałem to początkowo zrobić za pomocą php+MYSQL w ten sposób:
1) czy sa jacys zawodnicy dla ktorych trzeba policzyc srednia? tak idz do (2) nie idz do 6)
2) czy zawodnik zagrał 50 meczów? tak idz do (3) nie idz do (1)
3) przelicz jego srednia zadajac odpowiednie zapytanie do bazy
4) zapisz w tabeli tymczasowej
5) posortuj
6) koniec
tyle ze takie rozwiqazanie jest w moim odczuciu bardzo nieefektywne (obecnie w bazie jest okolo 200 zawodnikow a bedzie ich wiecej) ze wzgledu na petle ktora trzeba uzyć

Ten post edytował Aztech 23.10.2005, 15:06:58
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 10:35