1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Summe aller Messwerte pro Tag

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Mr.Aromat, 9 November 2018.

  1. Mr.Aromat

    Mr.Aromat Benutzer

    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!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    PHP ist hier Offtopic. Wenn Du je Tag die Summe haben willst, aggregiere in der DB und gruppiere je Tag. IN DER DB.
     
  3. Mr.Aromat

    Mr.Aromat Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

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

    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=*#
    
     
  5. Mr.Aromat

    Mr.Aromat Benutzer

    Könntest du mir dies bitte noch spezifischer erläutern, denn ich bin ein Anfänger.
    Soweit habe ich es schon ergänzt:
     
  6. akretschmer

    akretschmer Datenbank-Guru

    welcher Teil ist denn unverständlich?
     
  7. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  8. Mr.Aromat

    Mr.Aromat Benutzer

    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?!
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Vermutlich machst Du was falsch. Schon mal die Hilfe kontaktiert?
     
  10. Mr.Aromat

    Mr.Aromat Benutzer

    Aber beim ersten mal konnte ich auch code teilen
     
  11. akretschmer

    akretschmer Datenbank-Guru

    da hattest Du es offenbar richtig gemacht ;-)
     
  12. Mr.Aromat

    Mr.Aromat Benutzer

    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: 9 November 2018
  13. akretschmer

    akretschmer Datenbank-Guru

    Gespuckt?

    Was willst Du mit:

    uns sagen?
     
  14. Mr.Aromat

    Mr.Aromat Benutzer

    Nichts ich hab erst jetzt den code schicken können
     
  15. akretschmer

    akretschmer Datenbank-Guru

    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 ;-)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden