Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pobieranie średniej wartości z kilku rekordów
Mustava
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 2.03.2009

Ostrzeżenie: (0%)
-----


Mam w bazie mysql dane liczbowe o zakresie -50 do 150
Jak pobierając je dokonać uśrednienia zależnego od zewnętrznego paramatru - liczby np 8.255 (lub innej).
Trzeba ilość rekordów w zapytaniu podzielić przez parametr w wyniku czego powstaną 'paczki" których elementy należy dodać do siebie i podzielić przez liczbę elementów w "paczce".
Niby proste, ale nie wiem jak toto "zmajstrować", to co wyrzeźbiłem nie do końca działa porawnie (np gdy w paczce końcowej jest mniej elementów nić parametr to nie dokonuje się uśrednienie)

    1. [*]$parametr=8.255;//może przyjmować wartość od 0 do 20, może nieco więcej
    2. $x=""; //paczka/suma wartości z kilku rekordów z której będzie wyliczona średnia
    3. $i=""; //numer rekordu w 'paczce' do uśrednienia
    4. $a=""; //numer kolejny wyliczonej średniej z 'paczki'
    5. $wynik=""; //zbiór liczb (wyliczonych średnich) rozdzielonych przecinkiem
    6. while($row=mysql_fetch_array($result))
    7. {
    8. if($parametr==""){$rekord_wynikowy=$row['wartosc'];}
    9. else
    10. {
    11. $t=$row['wartosc'];
    12. if ($i<$parametr+1) //jeżeli zmienna $i(nr rekordu wchodzącego w skład 'paczki') jest mniejsza od parametru
    13. {
    14. $x=$x+$t; //pod zmienną $x podstaw porzednia wartość zmiennej $x oraz dodaj nową wartość
    15. echo"x:$x<br>";
    16. }
    17. else
    18. {
    19. $rekord_wynikowy=$x/$parametr+1; //wyliczenie średniej
    20. echo"$a: $rekord_wynikowy<br>";
    21. $x="";
    22. $i="";
    23. $a++;
    24. }
    25. $i++;
    26. }
    27. $wynik .= $rekord_wynikowy.',';
    28. }


  • Ten post edytował Mustava 7.01.2010, 22:15:56
    Go to the top of the page
    +Quote Post
     
    Start new topic
    Odpowiedzi (1 - 4)
    erix
    post
    Post #2





    Grupa: Moderatorzy
    Postów: 15 467
    Pomógł: 1451
    Dołączył: 25.04.2005
    Skąd: Szczebrzeszyn/Rzeszów




    Cytat
    Jak pobierając je dokonać uśrednienia zależnego od zewnętrznego paramatru - liczby np 8.255 (lub innej).

    Tzn? Trochę jaśniej?

    Ale strzelam w ciemno, że problem może tkwić w braku nawiasów, a stąd w błędnej kolejności działań:
    1. $rekord_wynikowy=$x/$parametr+1;

    Chyba, że to ma tak być. winksmiley.jpg


    --------------------

    ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
    Go to the top of the page
    +Quote Post
    Mustava
    post
    Post #3





    Grupa: Zarejestrowani
    Postów: 60
    Pomógł: 1
    Dołączył: 2.03.2009

    Ostrzeżenie: (0%)
    -----


    Jest np 1650 rekordów
    Dzielę tą ilość przez 8.255
    Wychodzi, że muszę wyliczyć średnią wartość z każdych 8 (a może 9) rekordów i zapisać jako jedna wartość i tak następne 8 rekordów, itd
    Jeżeli na końcu zostanie mi np 6 rekordów to już ich nie wyliczy - nie mam ostatniej średniej.

    Może można zrobić to po stronie mysqla?

    przykładowy wynik:
    Kod
    [b]158[/b] 20.587628866
    ....
    x:19
    x:38
    x:57
    x:77
    x:97
    [b]159[/b] 21
    x:20
    x:40
    x:60
    x:80
    x:100
    [b]160[/b] 21.618556701
    x:20
    x:40
    x:60
    x:80
    x:101
    [b]161[/b] 21.824742268
    x:21
    x:42
    Rekordów:970 - parametr:4.85


    Naprawdę nikt nie wie?
    To chyba nie jest jakieś super skomplikowane dla kogoś kto "siedzi" w programowaniu - dla mnie jak na razie trochę za trudne.

    Mój problem może być chyba podobny do przygotowania danych do wykreowania wykresu (np dwa tysiące danych do wyświetlenia na wykresie na osi X na obrazku o szer np 300px - trzeba chyba obliczyć średnie wartości - np 100 wartości)

    PS nie chodzi o ew. problem braku nawiasów

    Ten post edytował Mustava 7.01.2010, 20:54:59
    Go to the top of the page
    +Quote Post
    celbarowicz
    post
    Post #4





    Grupa: Zarejestrowani
    Postów: 253
    Pomógł: 31
    Dołączył: 30.03.2009
    Skąd: Szczecin

    Ostrzeżenie: (0%)
    -----


    jeśli dane są w granicach od -50 do 150 to gdyby wykonywać wykres zmieściłyby się w wysokości ekranu. jeśli wysokość ma być mniejsza to wystarczy daną liczbę podzielić przez np 2 . wysokość wykresu będzie 2 razy mniejsza ( z tym 8... wykres byłby zbyt płaski). jeśli chodzi o ilość danych to każda liczba może być przedstawiona jako jeden piksel wzdłuż ekranu.
    gdy ekran ma rozdzielczość 800px szerokości na wykresie możesz przedstawić około 800 danych.
    skrypt może kontrolować ilość danych i tak jak kombinujesz łączyć je w paczki, aby nie przekroczyć szerokości dostępnego ekranu. np przy ilości danych 2300 łączyć w paczki po 3 dane i brać średnią arytmetyczną.
    możesz zgłosić się na pw to pogadamy.
    Go to the top of the page
    +Quote Post
    Mustava
    post
    Post #5





    Grupa: Zarejestrowani
    Postów: 60
    Pomógł: 1
    Dołączył: 2.03.2009

    Ostrzeżenie: (0%)
    -----


    Dzięki za odpowiedź.
    Mogę oczywiście na PW, ale może kiedyś ktoś będzie miał podobny problem więc...

    1. Nie chodzi mi o wysokość - os Y, oczywiście tak jak piszesz, jeżeli byłaby konieczność to wszystkie wartości podzielić przez taką sama liczbę i OK
    2. Chodzi o os X - szerokość. chcę mieć ok 200 danych na szerokość (nie chce "zagęszczać").
    Potrzebuję toto do trochę czegoś innego, ale możemy "jechać" dalej na przykładzie wykresu biggrin.gif

    A więc proszę o pomoc w prawidłowym dzieleniu na paczki (jeżeli to co ja "wyczyniłem", odbiega od standardu czy jest nieco chore wstydnis.gif ) i obliczaniu średnich wartości.
    Ew. link z przykładem(mi).
    Go to the top of the page
    +Quote Post

    Reply to this topicStart new topic
    1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
    0 Zarejestrowanych:

     



    RSS Aktualny czas: 20.08.2025 - 09:17