Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wstawianie wartości zamiast nieistniejących rekordów z BD
jurcio6
post 4.11.2010, 16:51:08
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


Witam

Mam pewien problem - otóż mam bazę danych (MySQL), w której co 5 minut zapisuję odczyty z czujników (mniejsza o to z jakich) o mniej więcej takiej strukturze:

id | godzina | data | temperatura
1 | 19:00:00 | 2010-11-04 | 20
2 | 19:05:00 | 2010-11-04 | 21
3 | 19:10:00 | 2010-11-04 | 10
4 | 19:15:00 | 2010-11-04 | 18


Do tego rysuję wykresy, wykorzystując bibliotekę amCharts. Wszystko jest ok dopóki nie mam przerwy w zapisie danych do tabeli (np. wypinam na 2 godzinki czujnik). Załóżmy, że odczyt jest co 5 minut, a czujnik został wypięty o godzinie 19:03:00 i ponownie wpięty o 21:00:00. Wtedy tabela w bazie danych wygląda mniej więcej tak:

id | godzina | data | temperatura
1 | 19:00:00 | 2010-11-04 | 20
2 | 21:00:00 | 2010-11-04 | 21
3 | 21:05:00 | 2010-11-04 | 10
4 | 21:10:00 | 2010-11-04 | 18

I tutaj pojawia się poważny problem - bibliotece amCharts podaje dane przez funkcję, która parsuje je do formatu XML. Cały szkopuł polega na tym, że jeśli brakuje danych w bazie (sytuacja powyżej- nie ma odczytów z prawie 2 godzin), to wykres po prostu nie uwzględni tego czasu - narysuje mi tylko to, co dostał, czyli 4 punkty, a ja potrzebuję żeby narysował też brak danych w postaci odczytu o wartości 0. Nie mam pomysłu co zrobić z tymi danymi żeby po parsowaniu do XML'a w miejscach, gdzie nie ma odczytów (w tym wypadku od 19:05:00 do 21:00:00 co 5 minut) wstawić godziny (19:05:00, 19:10:00 itd.), a do reszty pól wartości zerowe (bo tylko tak amCharts narysuje prawidłowo wykres). Ktoś ma jakiś pomysł?

Dane z bazy pobieram i przez fetch_assoc() pakuję do tablicy - wynikiem jest tablica, która w każdym wierszu ma jeszcze jedną tablicę kolejno z kolumnami: id, godzina, data, temperatura.

Próbowałem robić wolne miejsca i uzupełniać je 0 w różnych dziwnych pętlach, ale pojawiały się problemy z czasem. Sprawę utrudnia fakt, że te przerwy mogą być różne - kilka minut na początku, kilka na końcu, może jakieś w środku - a skrypt ma sobie z tym radzić.

Proszę o pomoc, chociaż o naprowadzenie w jaki sposób to zrobić.

Ten post edytował jurcio6 4.11.2010, 16:55:48
Go to the top of the page
+Quote Post
drakos
post 4.11.2010, 16:55:06
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 28.10.2010

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


Jeśli skrypt kontroli czujnika masz w cronie (mam przeczucie winksmiley.jpg ) to jeśli czujnik jest wypięty powinien wstawiać 0 do bazy jako wynik. Wtedy masz rozwiązany problem plus kilka rekordów więcej.
Go to the top of the page
+Quote Post
jurcio6
post 4.11.2010, 16:58:43
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


Czujniki są zaprogramowane w Pythonie smile.gif Poza tym to nie jest "kilka" rekordów - tylko dla potrzeb przykładu wartości zapisywane są w bazie co 5 minut, natomiast w rzeczywistości te wartości czujnik wysyła co.. 30 sekund. Dodatkowo powinny one być trzymane w bazie przez co najmniej rok... może więcej tongue.gif Łatwo można policzyć ile rekordów będzie przez rok z jednego czujnika, a jeśli takich czujników będzie 100? Dlatego raczej odpada trzymanie zer, prościej chyba wymyślić funkcję w PHPie, która przy parsowaniu będzie uzupełniać luki zerami ;p

Ten post edytował jurcio6 4.11.2010, 16:59:23
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:07