Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zliczanie w przelocie, czy zapis do bazy
jsmp
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 25.01.2009

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


Mam dylemat, jak realizować pewne funkcje statystyczne. Przykładowo codziennie scrapuje sobie kurs waluty. Zapisuje sobie w bazie wg formatu: data | kurs_dnia.

Pytanie, czy np. aby opracować sobie np. średnią przyrostu/spadku z np. 100 pozycji, musiałoby to oznaczać robienie w locie obliczania z surowych danych tego przy każdym wywołaniu witryny. Czy zatem nie lepiej sobie przy zaciąganiu danych od razu powyliczać niektóre dane?

Mam też podobny dylemat jeśli chodzi np. o obliczanie przyrostów dla poszczególnych dni, wtedy ilość operacji była by jeszcze większa - bo dla każdej daty trzeba by było sprawdzić jaki to dzień tygodnia, wyciągnąć wartości osobno dla pon, wt, śr... itd, i dopiero tu zrobić średnią wg dni tygodnia.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




1. Jeżeli dane masz zapisywane dzień po dniu bez luk w dniach to możesz pozostać przy strukturze data, wartość. Wystarczy wówczas, że dołączysz (LEFT JOIN - LEFT by uwzględnić też pierwszy wynik) jeszcze raz tą samą tabelę (pamiętając o aliasie) na warunku (ON) poprzedni.data = biezacy.data - 1 dzien. No i zwykłym odejmowaniem obliczysz różnicę (pamiętając o COALESCE(poprzedni.wartosc, 0) żeby uniknąć NULLi). Jeśli natomiast mogą być luki w datach to nie możesz zrobić opisanego JOINa, bo zapewne chciałbyś uzyskać dane dla dnia poprzedniego zapisanego w bazie (czyli jeśli nie ma danych za wczoraj, to weź z przedwczoraj). Chyba, że miałyby Cię interesować tylko dni poprzednie - wówczas możesz zostać przy JOINie.

2. Dzień tygodnia możesz wyczaić w samym SQL: http://dev.mysql.com/doc/refman/5.5/en/dat...ction_dayofweek
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 27.12.2025 - 16:40