Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Skrypty obsługi baz danych _ [PHP] [MySQL] Średnia ważona

Napisany przez: valtuilpl 15.01.2014, 13:43:35

Witam!
Tworząc e-dziennik wpadłem na problem żeby obliczyć średnią ważoną z liczb z bazy MySQL.
część kodu:

  1. while ( $row = http://www.php.net/mysql_fetch_row($wynik) ) {
  2. $oceny = http://www.php.net/array($row[1]);
  3. $wagi = http://www.php.net/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. http://www.php.net/echo $wynik;
  12.  
  13. }

tabela w MySQL:

uczen | kartkówka
________________
uczen01 5,5,4,3,4
------------------------
uczen02 4,3,5,4,4

Napisany przez: Kshyhoo 15.01.2014, 13:58:57

Wszystko fajnie, tylko jakie jest pytanie? I dlaczego identyczne 3 watki?

Napisany przez: freemp3 15.01.2014, 14:10:03

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?

Napisany przez: valtuilpl 15.01.2014, 14:25:14

Problem jest w tym że kod:

  1. $oceny = '5,5,4,3,4';
  2. $oceny = http://www.php.net/array($oceny);
  3. $wagi = http://www.php.net/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

Napisany przez: Crozin 15.01.2014, 14:37:58

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)