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

Langage PHP Discussion :

histogramme php /mysql


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Par défaut histogramme php /mysql
    Bonjour,

    Je suis débutant en programmation php,j'ai besoin de votre support:
    Je suis entrain de créer mon premier site web.
    Je veux tracer un histogramme sur lequel il s'affiche les valeurs stokées dans ma base de données. Ce pour cela j'ai utilisé jpgraph 3.5.0b.
    J'a crée mon code php:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    <?php
    include ("jpgraph-3.5.0b1/src/jpgraph.php");
    include ("jpgraph-3.5.0b1/src/jpgraph_line.php");
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', ' ');
    define('MYSQL_PASS', ' ');
    define('MYSQL_DATABASE', ' ');
    $mois= date('M ');
    $jour=date('d');
    $tableau1 = array(); 
    $tableau2 = array(); 
    // *********************
    // Production de données
    // *********************
    $sql="SELECT day as D   FROM application WHERE id_stat='Station1' and day between '01' and '$jour' order  by month ASC , day ASC,time ASC  ;";
    $sql_ventes_par_mois =" SELECT bat_level,time   FROM application WHERE id_stat='Station1' AND day between '01' and '$jour' order  by month ASC , day ASC,time ASC;";
    $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');
    @mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');
     
    // Initialiser le tableau à 0 pour chaques mois ***********************
    $mysqlQuery = @mysql_query($sql_ventes_par_mois, $mysqlCnx) or die('Pb de requête');
    $mysqlQuery1 = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');
     
    while ($row1 = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC))  {
    	$tableau1[] =$row1['bat_level'];
    	}
    	while ($row2 = mysql_fetch_array($mysqlQuery1,  MYSQL_ASSOC)){
        $tableau2[]=$row2['D'];
    	}
     
    // ***********************
    // Création du graphique
    // ***********************
     
    // Création du conteneur
    $graph = new Graph(400,200);
     
    // Fixer les marges
    $graph->img->SetMargin(50,40,50,40);    
     
    // Mettre une image en fond
    //$graph->SetBackgroundImage("fond.jpg",BGIMG_FILLFRAME);
     
    // Lissage sur fond blanc (évite la pixellisation)
    $graph->img->SetAntiAliasing("white");
     
    // A détailler
    $graph->SetScale("textlin");
    // Ajouter une ombre
    $graph->SetShadow();
     
    // Ajouter le titre du graphique
    $graph->title->Set("Graphical Curve Of Battery Level:%");
     
    // Afficher la grille de l'axe des ordonnées
    $graph->ygrid->Show();
    // Fixer la couleur de l'axe (bleu avec transparence : @0.7)
    $graph->ygrid->SetColor('blue@0.7');
    // Des tirets pour les lignes
    $graph->ygrid->SetLineStyle('dashed');
     
    // Afficher la grille de l'axe des abscisses
    $graph->xgrid->Show();
    // Fixer la couleur de l'axe (rouge avec transparence : @0.7)
    $graph->xgrid->SetColor('red@0.7');
    // Des tirets pour les lignes
    $graph->xgrid->SetLineStyle('dashed');
     
    // Apparence de la police
    $graph->title->SetFont(FF_ARIAL,FS_BOLD,11);
     
    // Créer une courbes
    $courbe = new LinePlot($tableau1);
     
    // Afficher les valeurs pour chaque point
    $courbe->value->Show();
     
    // Valeurs: Apparence de la police
    $courbe->value->SetFont(FF_ARIAL,FS_NORMAL,9);
    $courbe->value->SetFormat('%d');
    $courbe->value->SetColor("red");
     
    // Chaque point de la courbe ****
    // Type de point
    $courbe->mark->SetType(MARK_FILLEDCIRCLE);
    // Couleur de remplissage
    $courbe->mark->SetFillColor("blue");
    // Taille
    $courbe->mark->SetWidth(2);
     
    // Couleur de la courbe
    $courbe->SetColor("blue");
    $courbe->SetCenter();
     
    // Paramétrage des axes
    $graph->xaxis->title->Set("$mois");
    //$graph->yaxis->title->Set("");
    $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->SetTickLabels($tableau2);
    // Ajouter la courbe au conteneur
    $graph->Add($courbe);
    $graph->Stroke();
    ?>
    Mon probléme est que j'ai plusieurs valeurs dans ma table de base de données durant toute une journée et dans l'axe d'abscisse je veux afficher le jour concernant que aprés le dernier affichage stokées dans la table,c'à'd come exemple pour le jour 13 juillet j'ai dans ma table de base de données plusieurs valeurs bat_level pour l'heure 03:24:54 j'ai 90% pour 04:04:09 j'ai 89% et ansi de suite.
    Récapitulatif:
    je veux dessiner mon histogramme d'un mois quelconque en affichant les valeurs stokées de chaque jour et pour chaque jour j'ai plusieurs valeurs dans des heurs quelconque


    Remarque ces valeurs proviennent à partir d'un capteur(c'a'd ils sont dynamiques lorsque le capteur capte un valeur il le stoke dans la table de base de données,il les capte en heure quelconque)

    Merci d'avance!!

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Consolide tes données par granularité temporelle (par heure, jour, semaines etc.)
    C'est assez simple: lors du parcours des résultats de requête, tu détermine à quel "tranche" correspond l'enregistrement en cours et tu le mets dans un array de résultat.

    Exemple:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    // supposons qu'il s'agit de données en provenance de mysql
    $data = array(
        array('date' => '2012-07-13 14:55:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 14:25:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 14:42:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 14:30:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 15:55:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 15:55:10', 'value' => rand(0,99)),
        array('date' => '2012-07-13 16:33:25', 'value' => rand(0,99)),
        array('date' => '2012-07-13 16:12:31', 'value' => rand(0,99)),
        array('date' => '2012-07-13 16:00:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 17:05:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 18:55:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 18:54:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 18:53:00', 'value' => rand(0,99)),
        array('date' => '2012-07-13 18:52:00', 'value' => rand(0,99)),
    );
     
    // on veut une granularité horaire
    $granularity = "3600";
     
    $results = array();
    foreach ($data as $row) {
        extract($row);
        $date = strtotime($date);
        $new_date = $date - ($date % $granularity); // on arrondit à l'heure
        if (!isset($results[$new_date])) $results[$new_date] = 0;
        $results[$new_date] += $value;
    }
     
    foreach ($results as $key => $value) {
        echo "Date: " . date('H:i', $key) . " > Value $value<br />";
    }

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 19h59
  2. [php][mysql]Enlever message d'erreur
    Par Destampy dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 31/05/2005, 11h19
  3. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 09h33
  4. [php / mysql] pb if ( mysql_query() )
    Par dkmatt dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/01/2004, 21h07

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