IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Boucle php pour calcul différence


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Je ferais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 '",';

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       $val  = ($prev - $arr[$i]->valeur_mesure);

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [Débutant] Remplacement boucle for pour calcul matriciel
    Par LoicS dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/03/2009, 19h26
  2. Réponses: 3
    Dernier message: 19/09/2008, 10h35
  3. Code pour calcul en boucle
    Par KGUTBM dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/06/2008, 12h04
  4. Réponses: 4
    Dernier message: 16/04/2008, 11h12
  5. [MySQL] Fonctions calculs SQL/PHP pour projet football
    Par spamyx dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo