Soustraction deux valeurs dans la table mysql" teleinfo"

459 views
Skip to first unread message

edgy72

unread,
Jul 15, 2014, 12:57:12 PM7/15/14
to domoti...@googlegroups.com
Bonjour

Je souhaiterais faire une soustraction de deux valeurs dans une base MySQL (celle utiliser par Anthony Penhard ) pour afficher sur une page php la valeur de cette soustraction .




Une requête un peu  dans ce style la ,mais ce code ne fonctionne pas :

// La requete

//SELECT (SELECT base FROM teleinfo_mono WHERE adco="031128100367" ORDER BY timestamp="1374703140") - (SELECT base FROM teleinfo_mono WHERE adco="031128100367" ORDER BY timestamp="1406239140");

//ENVOIE DE LA REQUETE AU SERVEUR

//$req = mysql_query($sql_base) or die('Erreur SQL !<br>'.$sql_base.'<br>'.mysql_error()); 

//RECUPRER VALEUR

//$data_base = mysql_fetch_assoc($req);    
//AFFICHAGE

//echo $data_base['base'] ;

L'Idée est de voir directement sur ma page php  la valeur calculer pour ma production photovoltaïque  d 24  juillet de l'année passée au 24 juillet de l'année en cour et cela en boucle pour toute les années,afin de connaitre ma production annuelle .

Merci pour votre aide

cedric

unread,
Jul 16, 2014, 4:11:03 AM7/16/14
to domoti...@googlegroups.com
Bonjour,

je n'ai pas le shéma de la table teleinfo_mono sous les yeux, mais
essaye ça (si adco n'est pas un VARCHAR, il faut enlever les quotes à sa
valeur) :

SELECT (SELECT base FROM teleinfo_mono WHERE adco="031128100367" AND
timestamp=1374703140 ORDER BY timestamp LIMIT 1) - (SELECT base FROM
teleinfo_mono WHERE adco="031128100367" AND timestamp=1406239140 ORDER
BY timestamp LIMIT 1);

hope its help



On 15/07/2014 18:57, edgy72 wrote:
> Bonjour
>
> Je souhaiterais faire une soustraction de deux valeurs dans une base
> MySQL (celle utiliser par Anthony Penhard ) pour afficher sur une page
> php la valeur de cette soustraction .
>
> <https://lh4.googleusercontent.com/-qye2-sJhRII/U8VdKMZKxtI/AAAAAAAACNU/zkBtkSfDTm4/s1600/Capture3.PNG>
>
>
>
>
> Une requête un peu dans ce style la ,mais ce code ne fonctionne pas :
>
> // La requete
>
> //SELECT (SELECT base FROM teleinfo_mono WHERE adco="031128100367"
> ORDER BY timestamp="1374703140") - (SELECT base FROM teleinfo_mono
> WHERE adco="031128100367" ORDER BY timestamp="1406239140");
>
> //ENVOIE DE LA REQUETE AU SERVEUR
>
> //$req = mysql_query($sql_base) or die('Erreur SQL
> !<br>'.$sql_base.'<br>'.mysql_error());
>
> //RECUPRER VALEUR
>
> //$data_base = mysql_fetch_assoc($req);
> //AFFICHAGE
>
> //echo $data_base['base'] ;
>
> L'Idée est de voir directement sur ma page php la valeur calculer
> pour ma production photovoltaïque d 24 juillet de l'année passée au
> 24 juillet de l'année en cour et cela en boucle pour toute les
> années,afin de connaitre ma production annuelle .
>
> Merci pour votre aide
>
> --
>
> ---
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> "domotique-EIB".
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> domotique-ei...@googlegroups.com
> <mailto:domotique-ei...@googlegroups.com>.
> Pour obtenir davantage d'options, consultez la page
> https://groups.google.com/d/optout.

cedric

unread,
Jul 16, 2014, 4:21:06 AM7/16/14
to domoti...@googlegroups.com
Re,
erratum, je viens de lire plus attentivement l'image de ton post, je te
propose donc :

SELECT (SELECT MAX(base) FROM teleinfo_mono WHERE adco="031128100367"
AND timestamp<1406239140) - (SELECT MAX(base) FROM teleinfo_mono WHERE
adco="031128100367" AND timestamp<1374703140);

Désolé pour les bêtises écrites ci-dessous !

Cédric

edgy72

unread,
Jul 16, 2014, 11:55:04 AM7/16/14
to domoti...@googlegroups.com
Merci pour ta réponse

Sa renvois comme résultat sa :2997678 sa correspond  2997.678 ,comment peut on arrondir la valeur a 2998 .

Merci

cedric

unread,
Jul 17, 2014, 5:31:45 AM7/17/14
to domoti...@googlegroups.com
SELECT ROUND((SELECT MAX(base) FROM teleinfo_mono WHERE
adco="031128100367" AND timestamp<1406239140) - (SELECT MAX(base) FROM
teleinfo_mono WHERE adco="031128100367" AND timestamp<1374703140));

cedric

unread,
Jul 17, 2014, 5:33:54 AM7/17/14
to domoti...@googlegroups.com
Re erratum :-)

SELECT ROUND(((SELECT MAX(base) FROM teleinfo_mono WHERE
adco="031128100367" AND timestamp<1406239140) - (SELECT MAX(base) FROM
teleinfo_mono WHERE adco="031128100367" AND timestamp<1374703140))/1000);

cedric

unread,
Jul 18, 2014, 7:30:53 AM7/18/14
to David Bonamy, domoti...@googlegroups.com
Bonjour,

je remet le forum en copie, la question n'a rien de bête, certe pas
grand chose à voir avec knx, mais cela permet de clôturer le fil avec
l'intégralité des messages.
Si je m'égare, merci au sanglier de bien vouloir supprimer ce post.


pour varier les années, il suffit de mettre les bonnes valeurs à la
fonction unix_timestamp. Ça se fait avec php (fonction date)

// La requête
$sql_cumul= "SELECT ROUND(((SELECT MAX(base) FROM teleinfo_mono WHERE
adco=\"031128100367\" AND timestamp<unix_timestamp('2014-01-01')) -
(SELECT MAX(base) FROM teleinfo_mono WHERE adco=\"031128100367\" AND
timestamp<unix_timesstamp('2014-12-31)))/1000) AS cumul" ;

//ENVOIE DE LA REQUETE AU SERVEUR
$req = mysql_query($sql_cumul) or die('Erreur SQL
!<br>'.$sql_cumul.'<br>'.mysql_error());

//RECUPRER VALEUR
$data = mysql_fetch_object($req);
//AFFICHAGE
if($data)
echo($data->cumul);




On 17/07/2014 19:48, David Bonamy wrote:
> Merci pour ta réponse débutant en mysql je ne connaissais pas la
> requête "round ".
>
> Je pourrais te solliciter une dernière fois encore si possible pour
> afficher la valeur sur ma page php j ai une erreur dans cette requête :
>
> Celle en rouge mais je ne vois pas ou est mon erreur .
>
> // La requête
> $sql_cumul= "SELECT ROUND(((SELECT MAX(base) FROM teleinfo_mono WHERE
> adco=\"031128100367\" AND timestamp<1406239140) - (SELECT MAX(base)
> FROM teleinfo_mono WHERE adco=\"031128100367\" AND
> timestamp<1374703140))/1000)" ;
> //ENVOIE DE LA REQUETE AU SERVEUR
> $req = mysql_query($sql_cumul) or die('Erreur SQL
> !<br>'.$sql_cumul.'<br>'.mysql_error());
> //RECUPRER VALEUR
> $data = mysql_fetch_assoc($req);
> //AFFICHAGE
> *echo $data_cumul['cumul'] / 1000; *
>
> Et je souhaiterais faire une boucle année par année sans aucune
> intervention c'est possible ?
> Je cherche sur google mais sans vraiment tomber sur ce que je
> recherche ayant trop de lacune en informatique.
>
> Merci encore pour ton aide et désoler de t'envoyer ce message en
> directe sur ta messagerie mais je ne souhaite pas trop pourrir le
> forum de questions" bêtes"
> .
> Cdt
>
>
>

edgy72

unread,
Jul 18, 2014, 1:00:52 PM7/18/14
to domoti...@googlegroups.com, edg...@gmail.com
Bonjour

Désoler mais le script ne fonctionne pas car je doit rester comme sa qui fonctionne tres bien lors que je lance la requête via phpmyadmin:

SELECT ROUND(((SELECT MAX(base) FROM teleinfo_mono WHERE 
adco="031128100367" AND timestamp<1406239140) - (SELECT MAX(base) FROM 
teleinfo_mono WHERE adco="031128100367" AND timestamp<1374703140))/1000); 

mais c'est juste la partie affichage qui me renvois une erreur a cette ligne :


echo $data_cumul['cumul'] / 1000;

Pour répondre a ta question c 'est pour la partie base de donnée knx et ipx800 via eibd : 

j ai fait une  page web résume toute mon installation domotique knx/eibd/linknx/ipx800/Zipabox avec module knx/ graphique teleinformation compteur edf et panneau solaire dans le meme style que "http://conso.gourdet.net/tableau-de-bord.html" qui a fait un super travail et que je me suis beaucoup  inspirer.



Voila 

Merci de ton soutient  
Reply all
Reply to author
Forward
0 new messages