![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 26.08.2009 Skąd: Zamojsce Ostrzeżenie: (0%) ![]() ![]() |
(IMG:http://images48.fotosik.pl/188/36eb6354103b063bm.jpg)
SCREEN Na screenie widać prosty schemat tabeli w bazie danych Na dole struktura a na górze rekordy Mamy 8 dni i 4 produkty dla których trzeba policzyć Popyt średni i Odchylenie Standardowe Kolega proponuje tak obliczać Pśr i OS Cytat("Norbert") $pytanko="SELECT popyt_klej FROM popyt"; $rezultat = mysql_query($pytanko) or die("Błąd zapytania"); $tablica = mysql_fetch_array($rezultat); $n=count($tablica); $srednia=0; for($i=0;$i<=$n;$i++) { $srednia=$srednia+$tablica[$i]; } $srednia=$srednia/$n; for($i=0;$i<=$n;$i++) { $wyraz_srednia=$tablica[$i]-$srednia; // tutaj do zmiennej $wyraz_srednia przypisujesz roznice danej liczby i sredniej wszystkich liczb $tablica2[$i]= $wyraz_srednia * $wyraz_srednia; } for($i=0;$i<=$n;$i++) { $wynik=$wynik+$tablica2[$i]; //dostajesz sume tych wszystkich kwadratow roznicy wyrazu i sredniej; } $wynik=sqrt($wynik); echo "<h1>Srednia: ".$srednia."</h1><P>"; echo "<h1>Odchylenie: ".$wynik."</h1><P>"; Kod daje takie wyniki dla popyt_klej i popyt_srubki Srednia: 10 Odchylenie: 17.320508075689 Kod daje takie wyniki dla popyt_farba i popyt_drewno Srednia: 5 Odchylenie: 8.6602540378444 Powinna wyjść średnia dla popyt_klej: 160/8 czyli 20 Mam takie pytanie: Czy da radę napisać tak kod aby później była możliwość dodawania kolejnych wierszy Id=9, data, popyty dla poszczególnych towarów itd... oraz możliwość dodawania towarów, czyli chodzi mi o taki kod który by liczył Pśr i OS nawet gdy tabela będzie się rozrastać w 2 wymiarach Chyba nie ma sensu dla każdego towaru robić osobną tabelę w bazie danych. Takie rozwiązanie jakie prezentuje screen, że w jednej tabeli są wszystkie towary i wszystkie wartości popytu jest chyba najlepszy. Tylko problem z tym ciężkim do wymyślenia kodem. Jakby ktoś był w stanie coś wymyśleć to proszę o jakieś pomysły lub kontakt GG 3257134 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Sumowanie wszystkiego w kolumnie:
Sumowanie kwadratów w kolumnie:
Brakuje Ci jedynie liczby wierszy (IMG:style_emoticons/default/winksmiley.jpg)
A więc ostatecznie:
Nie dałem jedynie sprawdzenia czy $result zwraca wynik z bazy czy nie. To i tak chyba tylko na localhoscie będzie odpalane. EDIT: Użyłem FOR bo jest wygodniej. Nie robiłem sprawdzania nazwy bo po co? Wyniki są liczone dla kolejnych kolumn i stąd po kolei będzie to wyliczone dla: drewna, śrubek, kleju i farby. Stąd też właśnie pętla do 4 jedzie (IMG:style_emoticons/default/smile.gif) Ja użyłem wzoru na odchylenie: odchylenie = pierwiastek ( ( suma_kwadratów_wszystkich_wartości / liczba_wartości ) - kwadrat_średniej ) Nie wiem czy tego akurat używasz, ale jest ten wzór równoważny z: odchylenie = pierwiastek ( ( ( do_kwadratu(wartość - średnia) ) / liczba_wartości ) ) EDIT2: Doczytałem Twoje dodatkowe pytania... Podane rozwiązanie z minimalnymi modyfikacjami może służyć jak chciałeś. Na ten moment działa jeśli będziesz zwiększał liczbę rekordów dla kolejnych dni. Założyłem, że wszystkie rekordy są pełne, a więc zawierają dane. jeśli by tak nie było to musisz sobie poprawić zapytanie by sprawdzało i liczyło tylko dla tych wierszy gdzie w danej kolumnie SĄ jakieś wartości i liczyło ile ich jest. Rozwiązanie jest skalowalne także o kolejne produkty, ale do SELECT w zapytaniach wtedy musisz dodawać dodatkowe kolumny wynikowe oraz przy samym obliczaniu zmienić w pętli FOR liczbę iteracji na taką, by pasowała do liczby produktów. Teraz są 4 ale może być ich więcej. Pamiętaj, że ja założyłem, iż wszystkie pola w tabeli są wypełnione. Jeśli tak nie jest to musisz sobie zapytania i kod dopasować do własnych potrzeb. Ten post edytował thek 27.08.2009, 00:08:47 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 02:42 |