Einzelnen Beitrag anzeigen
  #11  
Alt 04.06.2018, 21:31:07
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
AW: mehrere Tabellen über Timestamp abfragen

So ich hab jetzt eine Lösung gefunden.

Ich lasse das nicht mehr in einem Query, sondern mach es über mehrere Abfragen und dann mit Arrays.

Das Abarbeiten der Funktion dauert jetzt je nach Zeitraum ca. 8 Sekunden.

So sieht das im Moment aus:
PHP-Code:
function hzg_pvbetrieb_einzel($von=NULL$bis=NULL$betriebsart=NULL){
    include(
'sql_connect.php');

    
//*** Betriebsarten***
    // 0 = Heizen
    // 5 = Warmwasser
    // 12 = Photovoltaik
    // 17 = ZWE (Zweitwärmeerzäuger -> Heizstab)
    

    
$verbrauch NULL;
    
$ausgabe   NULL;
    
$i=0;
    
// Datum der Form dd.mm.yyyy umwandeln in YYYY-mm-dd
    
if($von !== NULL && $bis !== NULL){

        
$vondatum_split explode(".",$von);
        
$vondatum $vondatum_split[2]."-".$vondatum_split[1]."-".$vondatum_split[0];

        
$bisdatum_split explode(".",$bis);
        
$bisdatum $bisdatum_split[2]."-".$bisdatum_split[1]."-".$bisdatum_split[0];

        
$zeitraum " BETWEEN  '".$vondatum."' AND '".$bisdatum."'";
    }
    
    
    
    
//===== WEBSERVER-Daten der Heizung ===============
    
$sql_webquery "SELECT wp_status, CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS w_timestamp, TBWsoll
                       FROM heizung_webdaten
                      WHERE timestamp "
.$zeitraum."
                        AND wp_status = "
.$betriebsart."
                   ORDER BY w_timestamp"
;
    

    
$result $mysqli->query($sql_webquery);
    echo 
$mysqli->error;
    while(
$daten $result->fetch_array(MYSQLI_ASSOC)){

        
        
$webdaten[$i] = array('timestamp' => $daten['w_timestamp'],
                              
'wp_status' => $daten['wp_status'],
                              
'TBWsoll'   => $daten['TBWsoll']);
        
$i++;
        
    }
    
    


    
//======= DATEN Stromzähler für Heizung ==============
    
$sql_hzquery "SELECT WirkenergieSigmaL_imp, WirkleistungSigmaL, CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS timestamp
                       FROM strom_heizungsdaten
                      WHERE timestamp "
.$zeitraum."
                   ORDER BY timestamp"
;


    
$result $mysqli->query($sql_hzquery);
    echo 
$mysqli->error;
    while(
$hzdaten $result->fetch_array(MYSQLI_ASSOC)){

        
$hzstrom[$hzdaten['timestamp']] = array('WirkenergieSigmaL_imp' => $hzdaten['WirkenergieSigmaL_imp'],
                                                
'WirkleistungSigmaL'    => $hzdaten['WirkleistungSigmaL']);

    }
    

    
//======= DATEN Stromzähler Haus-Gesamt ===================
    
$sql_hausstrom "SELECT CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS timestamp, WirkleistungSigmaL
                        FROM strom_hausdaten
                       WHERE timestamp "
.$zeitraum."
                    ORDER BY timestamp"
;
                    

    
$result $mysqli->query($sql_hausstrom);
    echo 
$mysqli->error;
    while(
$hausdaten $result->fetch_array(MYSQLI_ASSOC)){

        
$hausstrom[$hausdaten['timestamp']] = array('WirkleistungSigmaL' => $hausdaten['WirkleistungSigmaL']);

    }
    

    
//======== DATEN Heizung ================================
    
$sql_hzgquery "SELECT datum, uhrzeit, TRLsoll, TRLext, TBW
                        FROM heizung_daten
                       WHERE datum "
.$zeitraum."
                    ORDER BY datum, uhrzeit"
;


    
$result $mysqli->query($sql_hzgquery);
    echo 
$mysqli->error;
    while(
$hzgdaten $result->fetch_array(MYSQLI_ASSOC)){

        
$zeit_split explode(":"$hzgdaten['uhrzeit']);
        
$tstamp $hzgdaten['datum']." ".$zeit_split[0].":".$zeit_split[1].":00";
        

        
$heizungsdaten[$tstamp] = array('TRLsoll' => $hzgdaten['TRLsoll'],
                                           
'TRList' => $hzgdaten['TRLext'],
                                           
'TBW'    => $hzgdaten['TBW']);


    }

    
    
//======== Zusammenführen der einzelnen Daten in ein Array ========
    
foreach($webdaten AS $k => $webvalues){

        if(!isset(
$heizungsdaten[$webvalues['timestamp']]['TRLsoll'])){
            
$heizungsdaten[$webvalues['timestamp']]['TRLsoll'] = NULL;
        }
        if(!isset(
$heizungsdaten[$webvalues['timestamp']]['TRList'])){
            
$heizungsdaten[$webvalues['timestamp']]['TRList'] = NULL;
        }
        if(!isset(
$heizungsdaten[$webvalues['timestamp']]['TBW'])){
            
$heizungsdaten[$webvalues['timestamp']]['TBW'] = NULL;
        }

        
$pv_heizdaten[] = array('timestamp' => $webvalues['timestamp'],
                                
'wp_status' => $webvalues['wp_status'],
                                
'WirkenergieSigmaL_imp' => $hzstrom[$webvalues['timestamp']]['WirkenergieSigmaL_imp'],
                                
'Wirkleistung_hzg'      => $hzstrom[$webvalues['timestamp']]['WirkleistungSigmaL'],
                                
'Wirkleistung_haus'     => $hausstrom[$webvalues['timestamp']]['WirkleistungSigmaL'],
                                
'TRLsoll'               => $heizungsdaten[$webvalues['timestamp']]['TRLsoll'],
                                
'TRList'               => $heizungsdaten[$webvalues['timestamp']]['TRList'],
                                
'TBWist'               => $heizungsdaten[$webvalues['timestamp']]['TBW'],
                                
'TBWsoll'              => $webvalues['TBWsoll']);

    }
    
    
    
//=== zusammenhängende Datensätze im Array gruppieren ==
    
$i=0;
    foreach(
$pv_heizdaten AS $k => $data){

        if(
$k == 0){
            
$group_data[$i][$k] = array('timestamp'             => $data['timestamp'],
                                        
'wp_status'             => $data['wp_status'],
                                        
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
                                        
'Wirkleistung_hzg'      => $data['Wirkleistung_hzg'],
                                        
'Wirkleistung_haus'     => $data['Wirkleistung_haus'],
                                        
'TRLsoll'               => $data['TRLsoll'],
                                        
'TRList'                => $data['TRList'],
                                        
'TBWist'                => $data['TBWist'],
                                        
'TBWsoll'               => $data['TBWsoll']);
        } else {

            
$vk $k-1;
            
$diff strtotime($data['timestamp']) - strtotime($pv_heizdaten[$vk]['timestamp']);

            if(
$diff == 60){

                
$group_data[$i][$k] = array('timestamp'         => $data['timestamp'],
                                        
'wp_status'             => $data['wp_status'],
                                        
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
                                        
'Wirkleistung_hzg'      => $data['Wirkleistung_hzg'],
                                        
'Wirkleistung_haus'     => $data['Wirkleistung_haus'],
                                        
'TRLsoll'               => $data['TRLsoll'],
                                        
'TRList'                => $data['TRList'],
                                        
'TBWist'                => $data['TBWist'],
                                        
'TBWsoll'               => $data['TBWsoll']);
            } else {
                
$i++;
                
$group_data[$i][$k] = array('timestamp'         => $data['timestamp'],
                                        
'wp_status'             => $data['wp_status'],
                                        
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
                                        
'Wirkleistung_hzg'      => $data['Wirkleistung_hzg'],
                                        
'Wirkleistung_haus'     => $data['Wirkleistung_haus'],
                                        
'TRLsoll'               => $data['TRLsoll'],
                                        
'TRList'                => $data['TRList'],
                                        
'TBWist'                => $data['TBWist'],
                                        
'TBWsoll'               => $data['TBWsoll']);
            }
        }

    }
    
    
    
//============== Berechnung des Verbrauchs =================================
    
    
return $group_data;
}


//========= Gibt dieses Array aus =============
Abfrage dauerte3 Sek.

Array
(
    [
0] => Array
        (
            [
0] => Array
                (
                    [
timestamp] => 2018-05-01 11:40:00
                    
[wp_status] => 12
                    
[WirkenergieSigmaL_imp] => 5624.8008
                    
[Wirkleistung_hzg] => 3.2618
                    
[Wirkleistung_haus] => -2.4285
                    
[TRLsoll] => 56.0
                    
[TRList] => 34.8
                    
[TBWist] => 49.2
                    
[TBWsoll] => 
                )

            [
1] => Array
                (
                    [
timestamp] => 2018-05-01 11:41:00
                    
[wp_status] => 12
                    
[WirkenergieSigmaL_imp] => 5624.8379
                    
[Wirkleistung_hzg] => 3.2658
                    
[Wirkleistung_haus] => 1.3247
                    
[TRLsoll] => 56.0
                    
[TRList] => 35.1
                    
[TBWist] => 49.1
                    
[TBWsoll] => 
                )

            [
2] => Array
                (
                    [
timestamp] => 2018-05-01 11:42:00
                    
[wp_status] => 12
                    
[WirkenergieSigmaL_imp] => 5624.9043
                    
[Wirkleistung_hzg] => 1.1184
                    
[Wirkleistung_haus] => 0.8235
                    
[TRLsoll] => 56.0
                    
[TRList] => 36.0
                    
[TBWist] => 49.2
                    
[TBWsoll] => 
                )

        )

    [
1] => Array
        (
            [
3] => Array
                (
                    [
timestamp] => 2018-05-01 14:38:00
                    
[wp_status] => 12
              
           

Mit Zitat antworten