Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2011, 22h14   #1
Membre du Club
 
Inscription : février 2009
Messages : 330
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 330
Points : 56
Points : 56
Par défaut Boucle php pour calcul différence

Bonsoir à tous,

Je récupère avec cette requete + code les valeurs (cumul de ma conso electrique) sur 24h afin de générer des graphiques.
Je voudrais générer un graph avec les valeurs instantanées. La solution pour moi est donc de faire la diff de la valeur n avec la valeur n-1.

Requete actuelle :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
// select last entries
$query = "SELECT timestamp_mesure, valeur_mesure FROM releves WHERE id_capteur='19' AND type_mesure='count' AND timestamp_mesure BETWEEN DATE_ADD(NOW(),INTERVAL -25 HOUR) AND NOW() ORDER BY timestamp_mesure DESC";
$res = mysql_query($query);
 
// put all the data inside an array
$arr = array();
while($obj = mysql_fetch_object($res)){
  $arr[] = $obj;
}
echo 'chart_data: "';
	for ($i = sizeof($arr) - 1; $i > 0; $i--) {
		$time = $arr[$i]->timestamp_mesure; 
		$val = $arr[$i]->valeur_mesure; 
		echo "".date("d/m H:i", strtotime("$time + 1 hours")).";;".$val."\\n";
    }
echo '",';
Je voudrais en fait d'abord faire un calcul, c'est à dire soustraire ma valeur avec la valeur n-1, et que cette différence soit ma variable $val.

exemple : ma première valeur est 30, ma deuxième valeur est 10, la diff 30-10 doit être mon $val.
Je pense qu'il rajouter une boucle qui pour chaque ligne de $arr, fasse une diff avec $arr-1, mais j'ai des problèmes pour l'écrire.

Merci pour votre aide.
mikael2235 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 22h47   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonsoir,

Je ferais ainsi :
Code :
1
2
3
4
5
6
7
8
9
$iMax = count($arr) - 1;
echo 'chart_data: "';
for ($i = $iMax; $i > 0; --$i) {
   $time = $arr[$i]->timestamp_mesure;
   $prev = ($i) ? $arr[$i-1]->valeur_mesure : 0;
   $val  = $arr[$i]->valeur_mesure - $prev;   
   echo "".date("d/m H:i", strtotime("$time + 1 hours")).";;".$val."\\n";
}
echo '",';
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 23h07   #3
Membre du Club
 
Inscription : février 2009
Messages : 330
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 330
Points : 56
Points : 56
Merci rawsrc,

J'ai testé ton code, c'est ok, mais par contre mes valeurs sont en négatifs.
C'est bizarre car ma dernière valeur est toujours supèrieure à $prev, donc théoriquement je devrais être en positif ?

J'ai inversé le calcul, et c'est ok, mais je ne comprends pas pourquoi ?
Code :
1
2
 
   $val  = ($prev - $arr[$i]->valeur_mesure);
mikael2235 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 13h51   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 666
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 666
Points : 5 395
Points : 5 395
Dans ta requête SQL, tu fais un tri décroissant sur le timestamp, autrement dit par ordre chronologique inverse.
Donc la valeur du jour i-1 est celle du lendemain du jour i.
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h54.


 
 
 
 
Partenaires

Hébergement Web