Ich hab natürlich auch weiter um eine Lösung gesucht und hab mein Query etwas umgebaut.
Muss dazu sagen, dass ich ein absoluter Laie bin und programmiere nur für mich als Hobby.
Hab zwei SELECT-Abfragen integriert die von den anderen Tabellen auch nur den benötigten Zeitraum liefern sollen um die Zeit für die Abarbeitung zu verkürzen.
Die Zeit hat sich auch auf ca. 50 Sekunden verkürzt - ist aber immer noch sehr lange wenn man vor dem Bildschirm sitzt und warten muss.
Hier die aktuelle Abfrage:
PHP-Code:
// 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."'";
} elseif ($jahr !== NULL){
$zeitraum = " YEAR(heizung_webdaten.timestamp) = ".$jahr."";
}
$sql_query = "SELECT hzw.*, sthz.timestamp AS timestamp_strom, sthz.WirkenergieSigmaL_imp, sths.WirkleistungSigmaL
FROM heizung_webdaten hzw,
(SELECT * FROM strom_heizungsdaten WHERE timestamp ".$zeitraum.") sthz,
(SELECT * FROM strom_hausdaten WHERE timestamp ".$zeitraum.") sths
WHERE hzw.timestamp ".$zeitraum."
AND hzw.wp_status = 12
AND ABS(UNIX_TIMESTAMP(hzw.timestamp) - UNIX_TIMESTAMP(sthz.timestamp)) < 59
AND ABS(UNIX_TIMESTAMP(hzw.timestamp) - UNIX_TIMESTAMP(sths.timestamp)) < 59
ORDER BY hzw.timestamp";
echo $sql_query."<br>";
$result = $mysqli->query($sql_query);
echo $mysqli->error;
while($daten = $result->fetch_assoc()){
echo $daten['timestamp']." : ".$daten['wp_status']." => HZG-Strom_Daten: ".$daten['timestamp_strom']." -> ".$daten['WirkenergieSigmaL_imp']."kWh | akt. Verbrauch:".$daten['WirkleistungSigmaL']." kW<br>";
}