Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyświetlanie średniej w pętli
Forum PHP.pl > Forum > Przedszkole
jusko
Witam,

Mam problem z wyświetleniem rekordów na podstawie wyliczonej średniej.

Kod wygląda tak:

  1. $query_oceny = "SELECT * FROM tabela ORDER BY ".$srednia." DESC LIMIT 10";
  2. $result = mysql_query ($query_oceny);
  3. while ($row = mysql_fetch_array($result)){
  4.  
  5. $up = ($row[12]*1)+($row[13]*2)+($row[14]*3)+($row[15]*4)+($row[16]*5);
  6. $down = ($row[12]+$row[13]+$row[14]+$row[15]+$row[16]);
  7. if ($down == 0) echo '0';
  8. else
  9. $srednia = $up /$down;
  10.  
  11. $body .='
  12. <li>
  13. ...
  14. '.$srednia.'
  15. </li>';}


Średnią wylicza dobrze, ale w pętli dla każdego rekordu pokazuje ten sam wynik.

Pozdr
nospor
1) Jaki ten sam wynik? 0? W takim razie to if ($down == 0) echo '0'; zawsze = 0
Inny? W takim razie $up and $down zawsze wynosą tyle samo

2) $query_oceny = "SELECT * FROM tabela ORDER BY ".$srednia." DESC LIMIT 10";
Chyba chciales sortowac po polu wiec masz sortowac po polu a nie po zapodanej wartosci....
Tak ma byc:
$query_oceny = "SELECT * FROM tabela ORDER BY NAZWA_POLA_PO_KTORYM_CHCESZ_SORTOWAC DESC LIMIT 10";
jusko
1) W rekordach gdzie oceny już są wpisane to średnia wyliczana i wyświetlana jest prawidłowo. Jeśli jest jakiś rekord gdzie ocen nie ma w ogóle to chciałbym aby wyświetlało 0 a wyświetla wynik z innego rekordu.

2) Sortować chce wg. średniej, która nie jest zapisywana do żadnego pola, tylko wyliczana na podstawie pól gdzie znajdują się poszczególne oceny. Dlatego chciałbym sortować według zmiennej $srednia.



Rekord z tabeli wygląda tak:

id nazwa ... ... ... ... ... rate1 rate2 rate3 rate4 rate5

Pola rate (odpowiedniki ocen 1-5) zawierają ilość ocen.
nospor
ad1) Widac $down nie rowna sie 0 smile.gif
ad2) Poraz kolejny ci tlumacze ze zle to robisz. W tej chwili sortujesz po wartosci i to na dodatek ktorą dopiero pozniej wyliczasz. To jest podwojnie ŹLE zrobione.
Skoro chcesz sortowac po sredniej z pol, to wlasnie te srednia jako wyliczenia na ZYWO masz wstawic do ORDER BY.
jusko
Problem nr. 1 rozwiązałem, zostało mi sortowanie
jusko
Mógłbyś podpowiedzieć w jaki sposób wyliczyć średnią na żywo?
nospor
W tym temacie:
Temat: MySQLPHPObliczenie sredniej dla kilku pol
juz ci to wyjasniono (post Sephirusa)

Moglbys czytac wlasne tematy
jusko
Wielkie dzięki! rozwiązane, rzeczywiście zapomniałem o tym temacie. Pozdr!

Jusko
Jeszcze miałbym jedno pytanie:

  1. (rating1*1+rating2*2+rating3*3)/(rating1+rating2+rating3) AS `average`


Jak average zapisac jako zmienną?
nospor
twoje avarage, jak i inne pola ktorych uzywasz, znajduje sie w $row
jusko
Chciałbym zrobić funkcję która zamiast liczb wyświetlałaby gwiazdki:

  1.  
  2. function rate_stars($average) {
  3. $average = questionmark.gif?;
  4. if ($average == 0) return '';
  5. elseif ($average >= 1 and $average < 2) return '*';
  6. elseif ($average >= 2 and $average < 3) return '**';
  7. elseif ($average >= 3 and $average < 4) return '***';
  8. elseif ($average >= 4 and $average < 5) return '****';
  9. elseif ($average == 5) return '*****';}
  10.  


Mniej więcej coś takiego, ale nie wiem jak określić $average, z $row nie wychodzi bo funkcja jest poza pętlą.
nospor
Cytat
bo funkcja jest poza pętlą.
No i prawidlowo... deklaracja funkcji ma byc poza petlą. To wywolanie funkcji ma byc w petli
Turson
echo rate_stars($srednia $row czy coś tam innego) questionmark.gif
jusko
Jak w funkcji obliczyć $average, bądź pobrać wynik z zapytania?
Turson
Możesz przekazać jako parametr funkcji
jusko
a dokładniej jak to powinno wyglądać,

Jak prawidłowo powinna wyglądać zmienna $average wewnątrz funkcji?
Turson
normalnie przekazujesz zmienną do funkcji i tam robisz z nią co chcesz, z resztą tak jak napisałeś w poście #11 oprócz linii 3
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.