jusko
4.04.2014, 09:38:33
Witam,
Mam problem z wyświetleniem rekordów na podstawie wyliczonej średniej.
Kod wygląda tak:
$query_oceny = "SELECT * FROM tabela ORDER BY ".$srednia." DESC LIMIT 10";
$up = ($row[12]*1)+($row[13]*2)+($row[14]*3)+($row[15]*4)+($row[16]*5);
$down = ($row[12]+$row[13]+$row[14]+$row[15]+$row[16]);
if ($down == 0
) echo '0'; else
$srednia = $up /$down;
$body .='
<li>
...
'.$srednia.'
</li>';}
Średnią wylicza dobrze, ale w pętli dla każdego rekordu pokazuje ten sam wynik.
Pozdr
nospor
4.04.2014, 09:45:32
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
4.04.2014, 10:06:16
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
4.04.2014, 10:08:43
ad1) Widac $down nie rowna sie 0

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
4.04.2014, 10:11:20
Problem nr. 1 rozwiązałem, zostało mi sortowanie
jusko
4.04.2014, 10:18:56
Mógłbyś podpowiedzieć w jaki sposób wyliczyć średnią na żywo?
nospor
4.04.2014, 10:24:30
W tym temacie:
Temat: MySQLPHPObliczenie sredniej dla kilku poljuz ci to wyjasniono (post Sephirusa)
Moglbys czytac wlasne tematy
jusko
4.04.2014, 10:54:18
Wielkie dzięki! rozwiązane, rzeczywiście zapomniałem o tym temacie. Pozdr!
Jusko
4.04.2014, 11:56:21
Jeszcze miałbym jedno pytanie:
(rating1*1+rating2*2+rating3*3)/(rating1+rating2+rating3) AS `average`
Jak average zapisac jako zmienną?
nospor
4.04.2014, 11:57:40
twoje avarage, jak i inne pola ktorych uzywasz, znajduje sie w $row
jusko
4.04.2014, 12:07:41
Chciałbym zrobić funkcję która zamiast liczb wyświetlałaby gwiazdki:
function rate_stars($average) {
$average = 
?
; if ($average == 0) return '';
elseif ($average >= 1 and $average < 2) return '*';
elseif ($average >= 2 and $average < 3) return '**';
elseif ($average >= 3 and $average < 4) return '***';
elseif ($average >= 4 and $average < 5) return '****';
elseif ($average == 5) return '*****';}
Mniej więcej coś takiego, ale nie wiem jak określić $average, z $row nie wychodzi bo funkcja jest poza pętlą.
nospor
4.04.2014, 12:08:46
Cytat
bo funkcja jest poza pętlą.
No i prawidlowo... deklaracja funkcji ma byc poza petlą. To wywolanie funkcji ma byc w petli
Turson
4.04.2014, 12:10:55
echo rate_stars($srednia $row czy coś tam innego)
jusko
4.04.2014, 12:15:12
Jak w funkcji obliczyć $average, bądź pobrać wynik z zapytania?
Turson
4.04.2014, 12:17:54
Możesz przekazać jako parametr funkcji
jusko
4.04.2014, 12:30:23
a dokładniej jak to powinno wyglądać,
Jak prawidłowo powinna wyglądać zmienna $average wewnątrz funkcji?
Turson
4.04.2014, 12:37:26
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.