j'effectue un traitement PHP pour calculer le max de la température de l'eau par jour et l'insérer dans une autre table mais j'aimerai savoir si on peut utiliser une procédure ou un évènement par SQL (phpmyadmin)
Voici mon traitement :
<?php
/************************************************************
* Réception des datas du NodeMCU *
***********************************************************/
// On récupère les datas reçues
$Temp = $_GET["temp"];
$Humi = $_GET["humi"];
$Eau = $_GET["eau"];
$Fuite = $_GET["fuite"];
$Etat = $_GET["etat"];
$Quidonc = $_GET["quidonc"];
/************************************************************
* Gestion de la bas de donnée *
***********************************************************/
// On récupère les variables de connexion à la base de donnée
require "connexion.php";
// On récupère la date et l'heure actuelle
date_default_timezone_set("Europe/Paris");
$date_heure = date("Y-m-d H:i:s");
$date = date("Y-m-d");
$day = date("d");
// On récupère le jour de la dernière entrée de la table data
$reponse = $PDO->query("SELECT DAY(date_heure) as lastday FROM data ORDER BY date_heure DESC LIMIT 1");
while ($donnees = $reponse->fetch()) {
$lastday = $donnees['lastday'];
}
$reponse->closeCursor();
// A chaque changement de jour
if ( $day != $lastday) {
// on récupère le max de l'eau du jour précédent de la table data
$reponse = $PDO->query("SELECT DATE_FORMAT(date_heure,'%Y-%m-%d') AS lasday, MAX(eau) AS eauMax
FROM data
GROUP BY DAY(date_heure)
ORDER BY date_heure DESC LIMIT 1");
while ($donnees = $reponse->fetch()) {
$lasday = $donnees['lasday'];
$eauMax = $donnees['eauMax'];
}
$reponse->closeCursor();
// on insère le max de l'eau du jour précédent dans la table eau_max_jour
$resultats = $PDO->prepare("INSERT INTO eau_max_jour (date_heure, temp) VALUES (:lasday, :eauMax)");
$resultats->bindParam(':lasday', $lasday);
$resultats->bindParam(':eauMax', $eauMax);
$resultats->execute();
$resultats->closeCursor();
}
// On insère dans la table data les valeurs reçu du NodeMCU
$resultats = $PDO->prepare("INSERT INTO data (temp, humi, eau, fuite, etat, quidonc) values (:temp, :humi, :eau, :fuite, :etat, :quidonc)");
$resultats->bindParam(':temp', $Temp);
$resultats->bindParam(':humi', $Humi);
$resultats->bindParam(':eau', $Eau);
$resultats->bindParam(':fuite', $Fuite);
$resultats->bindParam(':etat', $Etat);
$resultats->bindParam(':quidonc', $Quidonc);
$resultats->execute();
$resultats->closeCursor();
///////////// Déconnexion de la base de donnée \\\\\\\\\\\\\\
$PDO=null;
exit();
?>
Je pense avoir trouvé
BEGIN
DECLARE lastjour integer;
DECLARE jour integer;
SET @lastjour = (SELECT DATE_FORMAT(date_heure,'%d')
FROM `data`
ORDER BY date_heure
DESC LIMIT 1);
SET @jour = DATE_FORMAT(CURRENT_DATE(),'%d');
IF(@jour != @lastjour) THEN
INSERT INTO eau_max_jour (date_heure, temp)
SELECT DATE_FORMAT(date_heure,'%Y-%m-%d'), MAX(eau)
FROM data
GROUP BY DAY(date_heure)
ORDER BY date_heure DESC
LIMIT 1;
END IF;
END
:
- Edité par Manubiglia 11 août 2023 à 16:06:17
traitement par PHP ou SQL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.