Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MySQL] Średnia ważona
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty obsługi baz danych
valtuilpl
Witam!
Tworząc e-dziennik wpadłem na problem żeby obliczyć średnią ważoną z liczb z bazy MySQL.
część kodu:
  1. while ( $row = mysql_fetch_row($wynik) ) {
  2. $oceny = array($row[1]);
  3. $wagi = array(1,1);
  4. $sumaWazona = 0;
  5. foreach( $oceny as $klucz => $ocena ){
  6. $sumaWazona += $ocena * $wagi[$klucz];
  7. $sumaWag += $wagi[$klucz];
  8. }
  9. $wynik = $sumaWazona / $sumaWag;
  10.  
  11. echo $wynik;
  12.  
  13. }

tabela w MySQL:

uczen | kartkówka
________________
uczen01 5,5,4,3,4
------------------------
uczen02 4,3,5,4,4
Kshyhoo
Wszystko fajnie, tylko jakie jest pytanie? I dlaczego identyczne 3 watki?
freemp3
Na podstawie kodu i informacji które zamieściłeś:
1. Zamiast tworzyć tablicę z ocen, trzeba ją rozbić (explode)
2. Jest tylko jeden typ ocen, tylko kartkówka? Na jakiej podstawie jest określana waga, kolejności ich wystawienia?
3. Tak jak napisał Kshyhoo, w czym w ogóle jest problem?
valtuilpl
Problem jest w tym że kod:
  1. $oceny = '5,5,4,3,4';
  2. $oceny = array($oceny);
  3. $wagi = array(1,1);
  4. $sumaWazona = 0;
  5. foreach( $oceny as $klucz => $ocena ){
  6. $sumaWazona += $ocena * $wagi[$klucz];
  7. $sumaWag += $wagi[$klucz];
  8. }
  9. $wynik = $sumaWazona / $sumaWag;

oblicza średią ważoną a zamieniając $oceny na te z bazy danych (5,5,4,3,4 typu string) juz nie działa.
@freemp3 1. Zaraz sprawdze 2 pokazałem tylko pierwszą tabele
Crozin
Przede wszystkim popraw swoją bazę danych, ponieważ trzymanie ocen w formie tekstu scalonego przecinkami jest kompletnie bez sensu w tym przypadku. Skorzystaj z normalnej relacji jeden-do-wielu.
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-2024 Invision Power Services, Inc.