Summe aller Messwerte pro Tag

Mr.Aromat

Benutzer
Beiträge
12
Hallo zusammen

Ich habe folgende Ausgangslage:

Ich habe eine Datenbank, die fortlaufend mit Messwerten beschrieben wird.

Nun möchte ich eine Summe aller Messwerte ausgeben lassen,
indem ich alle Messwerte innerhalb von 24 Stunden zusammen rechnen lasse.


So sieht mein Code aus.

PHP:
<?php

$Wert=$_GET["Wert"];

date_default_timezone_set('Europe/Zurich');

$con = mysql_connect("IP database","username","key");

if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db('test', $con);

$result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID = '$Wert' ");


while($row = mysql_fetch_array($result)) {
  $datum = $row['DateTime'];
  $value = round($row['Wert'],2);


$datum1970 = 1538392512000;

for($datum = $datum; $datum = $datum1970; $datum1970 + 86400){

if (($datum <= ($datum1970 + 86400)) && ($datum >= $datum1970)){

$Zeit = $datum1970 + 86400;


$valueFinal = $valueFinal + $value;   

 }
}

  $uts = strtotime ($Zeitalt);

if (date('I', time()))
{
    $uts = $uts + 7200;
    $flag=1;
}
else
{
    $uts=$uts+3600;
if($flag==1)
 {
        $uts=$uts-7200;
        $flag=0;
 }
}

  $Zeitalt=date('l, F j y H:i:s',$uts);
  $uts *= 1000; // convert from Unix timestamp to JavaScript time

if( Zeitalt != Zeit){

 $data[] = array((float)$uts,(float) $valueFinal);

$valueFinal = 0;

}

$Zeitalt = $Zeit;

}

if(Zeitalt != Zeit){

echo json_encode($data);
mysql_close($con);

}

?>

Falls ihr Verständnisfragen habt, dann fragt bitte, denn ich habe noch nicht viel
Erfahrung mit Foren ;)

Vielen Dank für eure Bemühung!
 
Werbung:
Leider haben wir keinen Zugriff auf die Datenbank, denn die Datenbank
ist nicht unser, sondern von einem "Kunden".

Was meinst du mit php ist Offtopic?

Kann man denn mit php das Problem nicht lösen?

Vielen Dank vorerst für deine schnelle Antwort
 
Leider haben wir keinen Zugriff auf die Datenbank, denn die Datenbank
ist nicht unser, sondern von einem "Kunden".

Um so wichtiger ist es, da nicht unsinnige Last drauf zu werfen.

Was meinst du mit php ist Offtopic?

Kann man denn mit php das Problem nicht lösen?

Vielen Dank vorerst für deine schnelle Antwort

Es geht hier schlicht nicht um PHP.

Code:
test=# create table aromat(d date, val int);
CREATE TABLE
test=*# insert into aromat select current_date + random()*3 * '1day'::interval, random()*100 from generate_series(1,20) s;
INSERT 0 20
test=*# select * from aromat ;
     d      | val
------------+-----
 2018-11-09 |  79
 2018-11-10 |  99
 2018-11-09 |  91
 2018-11-11 |   8
 2018-11-09 |  45
 2018-11-09 |  58
 2018-11-10 |  18
 2018-11-09 |  62
 2018-11-10 |  63
 2018-11-09 |  13
 2018-11-09 |   5
 2018-11-11 |  69
 2018-11-10 |  71
 2018-11-09 |  40
 2018-11-10 |  28
 2018-11-11 |  86
 2018-11-09 |  41
 2018-11-11 |  11
 2018-11-09 |  61
 2018-11-09 |  60
(20 rows)

test=*# select d, sum(val) from aromat group by d order by d;
     d      | sum
------------+-----
 2018-11-09 | 555
 2018-11-10 | 279
 2018-11-11 | 174
(3 rows)

test=*#
 
möglicherweise hab ich Dich falsch verstanden und du willst die Summe aller Meßwerte der letzten 24 Stunden (und nicht je Tag gruppiert).

Code:
test=# create table aromat(ts timestamp, val int);
CREATE TABLE
test=*# insert into aromat select now() - random()*2*86400 * '1second'::interval, random()*100 from generate_series(1,20) s;
INSERT 0 20
test=*# select * from aromat ;
             ts             | val
----------------------------+-----
 2018-11-08 03:58:03.817343 |  15
 2018-11-07 17:19:16.863533 |  21
 2018-11-08 20:53:30.31198  |  96
 2018-11-09 05:13:42.023989 |  98
 2018-11-08 01:12:49.251688 |  25
 2018-11-07 18:05:36.255981 |  39
 2018-11-08 09:04:40.172358 |  45
 2018-11-08 11:00:30.383946 |  60
 2018-11-08 04:23:32.004347 |  20
 2018-11-07 18:14:14.978977 |  70
 2018-11-08 15:06:45.772723 |  22
 2018-11-09 06:14:10.775821 |   3
 2018-11-07 17:19:42.409803 |  86
 2018-11-09 03:33:29.925116 |  83
 2018-11-08 18:13:09.312385 |  53
 2018-11-08 09:26:24.350519 |  20
 2018-11-08 07:03:03.639414 |  60
 2018-11-08 20:25:58.252705 |   8
 2018-11-08 12:51:55.163137 |  62
 2018-11-09 13:11:05.221353 |  36
(20 rows)

test=*# select sum(val) from aromat where ts between now() - '1day'::interval and now();
 sum
-----
 377
(1 row)

test=*#
 
Nein du hast mich schon richtig verstanden je Tag und nicht
von den letzten 24 Stunden!


Ich kann irgendwie gar kein Code mehr teilen. Hab alles x-mal versucht.
An was könnte das liegen?!
 
Tut mir Leid es hat gespuckt bei Antwort erstellen. Das war nicht meine ganze Antwort:

PHP:
<?php
$x='Z_H';
date_default_timezone_set('Europe/Zurich');
$con = mysql_connect(" "," ", " ");
if (!$con) {
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('MyHome', $con);

$result = mysql_query("SELECT d, 'SensorID' from 'DateTime' GROUP BY d;");

while($row = mysql_fetch_array($result)) {
  $datum = $row['DateTime'];
  $value = round($row['Messwert'],2);
  $uts = strtotime ($datum);
if (date('I', time()))
{
    $uts = $uts + 7200;
    $x=1;
}
else
{
    $uts=$uts+3600;
if($x==1)
 {
        $uts=$uts-7200;
        $x=0;
 }
}
  $datum=date('l, F j y H:i:s',$uts);
  $uts *= 1000; // convert from Unix timestamp to JavaScript time
   $data[] = array((float)$uts,(float) $value);
}
echo json_encode($data);
mysql_close($con);
?>

So habe ich es interpretiert. Ist das richtig oder bin ich hier komplett falsch?
 
Zuletzt bearbeitet:
Werbung:
noch einmal: hier geht es NICHT um PHP.

Ich habe Dir gezeigt, wie ich eine Tabelle mit bestimmten Spalten erstelle und wie ich diese Abfrage. Mit SQL. Nicht mit PHP.

Aber ein Hinweis noch zu PHP: die mysql-Funktionen sind seit zig Jahren deprecated und in aktuellen PHP-Versionen nicht mehr verfügbar. Deine Entwicklung da ist also dem Tode geweiht ;-)
 
Zurück
Oben