Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wstawianie wartości zamiast nieistniejących rekordów z BD
Forum PHP.pl > Forum > PHP
jurcio6
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ć.
drakos
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.
jurcio6
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.