lostyazilim
tr.link

PHP Grafikte Sayaç Verisi Sorunu

2 Mesajlar 629 Okunma
acebozum
tr.link

cheki cheki WM Aracı Kimlik Onayı
  • Üyelik 16.09.2012
  • Yaş/Cinsiyet 43 / E
  • Meslek yönetici
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 54
  • Beğeniler 10 / 1
  • Ticaret 0, (%0)
Merhaba,

Databasedeki verileri grafiğe dönüştürerek yolumladığım bir projem var. Normalde databaseden verileri aşağıdaki gibi çekip daha sonra çizgi grafikte gösterebiliyorum.

$query = mysqli_query($conn,"select DATE_FORMAT(TIMESTAMP,'$dataType') as date,avg(P1_3) as P1_3,avg(P2_3) as P2_3,avg(P3_3) as P3_3,avg(AVG_5) as AVG_5 from xxxxx group By date having date > '$startDate' and date < '$finishDate' $sqlString") or die(mysql_error());


Takıldığım nokta şu. Bası sütunlardaki veriler sayaç gibi sürekli artan veriler. Örneğin elektrik sayacı gibi. Elektrik tüketimi devam ettikçe sayaç artmaya devam ediyor (veri sıklığı dakikada bir).



Ben bir grafikte bu verileri göstermeye çalışacağım. Amacım saatlik tüketimleri göstermek. Fakat yukarıdaki yöntemle göstersem grafikte sürekli artan bir değer göreceğim. Eğer her bir saatin ilk dakikasındaki verilerin farkını otomatik alabilirsem amacıma ulaşabilirim. Örneğin saat 5 ile 6 arasındaki tüketimi gösterebilmem için saat 6daki ilk veriden saat5 teki ilk veriyi çıkarmam gerekiyor.

Bu sorunu nasıl çözebilirim?
 

 

elektronikssl
webimgo

ERENKYI ERENKYI WM Aracı Kullanıcı
  • Üyelik 11.07.2017
  • Yaş/Cinsiyet 26 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad E** K**
  • Mesajlar 169
  • Beğeniler 8 / 45
  • Ticaret 1, (%100)
Kodun tamamını göremediğim için tam olarak çalışan bir kod veremeyeceğim ama mantığını anlayın yeter.

NOT: PDO'ya göre yazıyorum kodu.


$gosterilecekSaatSayisi = 2; // son 2 saatlik tüketimi göster
$query = 'BLA BLA ORDERBY timespan desc LIMIT 0,' ($gosterilecekSaatSayisi*60);

// query'i çalıştır

$tuketimler = $sql->fetchAll();
$a = 0;
$b = 0;
$liste = array();

for($i=0; $i<($gosterilecekSaatSayisi*60); $i++) {
if($i != 0 || !is_float($i/60)) continue;

if($a == 0) {
$a = $tuketimler[$i];
} else if($b == 0) {
$b = $tuketimler[$i];
} else {
$liste[($i/60)] = $a - $b;
$a = 0;
$b = 0;
}
}


$liste'den son kullanımları getirebilirsiniz. Örnek son saatlik kullanımı $liste[0] şeklinde getirebilirsiniz. Tabi bunu attığınız resimdeki gibi her dakika veri girişi olduğunu varsayarak kodladım. Eğer bazen veri girişi olmuyorsa onun kontrolünü yapın. Kodda hata olabilir.
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al