Page 1 sur 1

Selection tables et construction de graphique.

Posté : 28 déc. 2014, 02:11
par dayou05
Bonjour à toute et à tous !
Je vous m'explique mon but afin de répondre à un cahier des charge : il me doit de faire un graphique.
Jusque là tout va bien, mon but étant d'afficher un graphique en récupérant des valeurs dans une table d'une base de données, cela étonnement de ma part fonctionne parfaitement, simplement à chaque ajouts de colonnes ( la colonne "lol" est une colonne sérieuse... :D ) je doit rajouter un bout de code a la mains. mais je veut à présent obtenir ces valeurs automatiquement .. Libre à vous cela fait 4 jours et nuits que je cherche!

Structure de la base de données Graph :
bdd1.png
Voici mon code en entier :

Code : Tout sélectionner

<?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("graph", $con); $sth = mysql_query("SELECT revenue FROM projections_sample"); $rows = array(); // Affichage des valeur pour la colonne revenue $rows['name'] = 'Revenue'; while($r = mysql_fetch_array($sth)) { $rows['data'][] = $r['revenue']; } $sth = mysql_query("SELECT overhead FROM projections_sample"); $rows1 = array(); // Affichage des valeur pour la colonne overhead $rows1['name'] = 'Overhead'; while($rr = mysql_fetch_assoc($sth)) { $rows1['data'][] = $rr['overhead']; } $sth = mysql_query("SELECT lol FROM projections_sample"); $rows2 = array(); // Affichage des valeur pour la colonne lol RAJOUTER A LA MAIN... $rows2['name'] = 'lol'; while($rrr = mysql_fetch_assoc($sth)) { $rows2['data'][] = $rrr['lol']; } $result = array(); array_push($result,$rows); array_push($result,$rows1); array_push($result,$rows2); print json_encode($result, JSON_NUMERIC_CHECK); mysql_close($con); ?>
Fichier affichage du graphique :

Code : Tout sélectionner

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Highcharts Example</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript"> $(function () { var chart; $(document).ready(function() { $.getJSON("data.php", function(json) { chart = new Highcharts.Chart({ chart: { renderTo: 'container', type: 'line', marginRight: 130, marginBottom: 25 }, title: { text: 'Revenue vs. Overhead', x: -20 //center }, subtitle: { text: '', x: -20 }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, yAxis: { title: { text: 'Amount' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, tooltip: { formatter: function() { return '<b>'+ this.series.name +'</b><br/>'+ this.x +': '+ this.y; } }, legend: { layout: 'vertical', align: 'right', verticalAlign: 'top', x: -10, y: 100, borderWidth: 0 }, series: json }); }); }); }); </script> </head> <body> <script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js"></script> <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div> </body> </html>
Un grand merci par avance !

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 02:28
par Elie
Hello,

J'ai pas bien compris ce que tu voulais faire.
Si ton soucis était que tu dois rajouter un bout de code a chaque collone, autant faire un truc qui recupere le nom de chaque collone et de lui dire ce que tu veux recuperer. Bref c'est un autre problème.

En tout cas est-ce que mon code te simplifie la vie ?
$return = array();
$sth = mysql_query("SELECT `revenue`, `overhead`, `lol` FROM `projections_sample`");                                             // Affichage des valeur pour la colonne revenue
while($r = mysql_fetch_array($sth)) {
	$return[0][] = $r['revenue'];
	$return[1][] = $r['overhead'];
	$return[2][] = $r['lol'];
}

$result = array(
				0 => array('name' => 'Revenue', 'data' => $return[0]),
				1 => array('name' => 'Overhead', 'data' => $return[1]),
				2 => array('name' => 'lol', 'data' => $return[2])
				);

echo json_encode($result, JSON_NUMERIC_CHECK);

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 02:37
par dayou05
Hello ! Merci pour ta réponse, oui en fait c'est exactement se que tu m'a dit, ce dont je veut faire !
En tout cas j'y vois plus claire grâce a ton code merci !
Tu pense que tu pourrai m'éclairer sur l'a récup auto ?

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 02:54
par Elie
Voilà le principe :
$champ = array();
$result = mysql_query("SHOW COLUMNS FROM `projections_sample`");
while ($row = mysql_fetch_assoc($result)) {
      $champ[] = $row['Field'];
}

// On retire les 2 premiers qui ne nous interesse pas ...
array_shift($champ);
array_shift($champ);

// On récupère donc $champ = array('revenue', 'overhead', 'lol');
// On fait donc la requete avec les champs...
$return = array();
$sth = mysql_query("SELECT `".implode('`, `', $champ)."` FROM `projections_sample`");                                             // Affichage des valeur pour la colonne revenue
while($r = mysql_fetch_array($sth)) {
 foreach($champ as $k => $v) {
        $return[$k][] = $r[$v];
 }
}

// On a créé autant de return que de champs et on les ajoutes dans $result
$result = array();
foreach($champ as $k => $v) {
array_push($result, array('name' => ucfirst($v), 'data' => $return[$k]));
}
Chez moi ca a l'air propre :)

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 03:05
par dayou05
Wouaw ! Tellement parfait et tellement propre !
Rien à dire c'est du beau boulot et le pire c'est que cela fonctionne a merveille !
Sauf que maintenant si, je veut plus récupérer les valeur d'une nouvelle colonne mais d'une nouvelle table automatiquement :
BDD.png
C'est à dire les valeurs de mesure, jour et heure et ainsi afficher dans mon graphique le nom des table ( donc le nom des capteurs ).

Merci à toi, je te rassure après si sa fonctionne c'est la fin ! :D

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 11:03
par Elie
Euh bah je sais pas trop ce que tu veux faire mais mon code s'adapte a toutes les tables ...
Mon système vire les 2 premiers champs automatiquement et prend tout ceux d'après.
A toi d'adapter tes tables a ce système.

Avec ta nouvelle table, tu voudrais recuperer quoi en gros ? Car la ca n'a plus rien a voir !

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 14:44
par dayou05
En effet, je crois que c'est complètement différent malheureusement ...
En fait je veut au lieu de travailler sur UNE table et plusieurs colonne travailler sur plusieurs tables et que 3 colonne toujours les mêmes.
Par exemple, je doit afficher et récupérer automatiquement toutes les tables contenus dans la colonne Arexx_Table ( qui sont crée ) dans la table tp_rexx_capteur, qui change jamais et afficher les valeurs des colonnes mesure, jour, heure de toutes ces tables ce qui veut dire que si je supprime une ligne de la table tp_arexx_capteur ( donc un capteur ) bein sa ne l'affiche plus lui ainsi que ces valeurs ...
BDD.png
Table.png
struct.png

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 16:37
par Elie
Je vois pas ce qui est compliqué mais bon ...
<?php

	// On selectionne les tables
	$tables = $return = array();
	$result = mysql_query("SELECT `Arexx_Table` FROM `tp_arexx_capteur`");
	while ($row = mysql_fetch_assoc($result)) {
		  $tables[] = $row['Arexx_Table'];
	}

	// On fait une boucle des tables pour lire leur contenu
	foreach($tables as $k => $v) {
		
		$sth = mysql_query("SELECT `mesure`, `jour`, `heure` FROM `".$v."`");
		while($r = mysql_fetch_array($sth)) {
		 $return[$k]['mesure'][] = $r['mesure'];
		 $return[$k]['jour'][] = $r['mesure'];
		 $return[$k]['heure'][] = $r['heure'];
		}

	}
	
	// Par contre après je sais pas comment tu veux classer les informations récoltées.
	print_r($return);

?>

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 17:22
par dayou05
Encore un grand merci, le code marche parfaitement seulement en fait j'ai deux fichier un fichier data.php contenu le code php qui m'a l'air correct et un fichier index.php contenu l'affiache du graphique en JS.
Il se trouve que sur l'axe y je veut les température mesure recupérée et sur la l'axe x je veut les données jour et heure recupéré.

Data.php :
<?php
$con = mysql_connect("localhost","root","");

if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("tp_arexx", $con);



        // On selectionne les tables
        $tables = $return = array();
        $result = mysql_query("SELECT `Arexx_Table` FROM `tp_arexx_capteur`");
        while ($row = mysql_fetch_assoc($result)) {
                  $tables[] = $row['Arexx_Table'];
        }

        // On fait une boucle des tables pour lire leur contenu
        foreach($tables as $k => $v) {
                
                $sth = mysql_query("SELECT `mesure`, `jour`, `heure` FROM `".$v."`");
                while($r = mysql_fetch_array($sth)) {
                 $return[$k]['mesure'][] = $r['mesure'];
                 $return[$k]['jour'][] = $r['mesure'];
                 $return[$k]['heure'][] = $r['heure'];
                }

        }
        
        // Par contre après je sais pas comment tu veux classer les informations récoltées.
    

print json_encode($result, JSON_NUMERIC_CHECK);

mysql_close($con);
?>
Et index.php

Code : Tout sélectionner

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Highcharts Example</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript"> $(function () { var chart; $(document).ready(function() { $.getJSON("data.php", function(json) { chart = new Highcharts.Chart({ chart: { renderTo: 'container', zoomType: 'x', type: 'line', marginRight: 130, marginBottom: 25 }, title: { text: 'Affichage des mesures des capteurs en fonction du temps et de la date.', x: -20 //center }, subtitle: { text: 'Vous pouvez effectuer un zoom sur le graphique en maintenant le clique gauche souris sur une zone du graphique', x: -20 }, xAxis: { categories: ['Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre'] }, yAxis: { max:50, // maxi du graphe min: -50, // mini du graphe tickInterval: 10, title: { text: 'Température °C' }, plotLines: [{ value: 0, width: 1, color: '#FF0000' }] }, tooltip: { formatter: function() { return '<b>'+ this.series.name +'</b><br/>'+ this.x +': '+ this.y + ' °C'; } }, legend: { layout: 'vertical', align: 'right', verticalAlign: 'top', x: -10, y: 100, borderWidth: 0 }, credits: { text: '© Dayan LOMBARDI', }, series: json }); }); }); }); </script> </head> <body> <script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js"></script> <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div> </body> </html>
J'utilise la librairie highchart pour la construction du graphique.

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 21:58
par Elie
Ouais bah en fait c'est un peu relou ... Connaissant HighChart faut exprimer une date de manière une peu chelou ...
<?php
$con = mysql_connect("localhost","root","");
if (!$con) die('Could not connect: ' . mysql_error());
mysql_select_db("tp_arexx", $con);

        // On selectionne les tables
        $tables = $return = array();
        $result = mysql_query("SELECT `Arexx_Table` FROM `tp_arexx_capteur`");
        while ($row = mysql_fetch_assoc($result)) {
                  $tables[] = $row['Arexx_Table'];
        }

        // On fait une boucle des tables pour lire leur contenu
        foreach($tables as $k => $v) {
                
                $sth = mysql_query("SELECT `mesure`, `jour`, `heure` FROM `".$v."`");
                while($r = mysql_fetch_array($sth)) {
                 $return[$k][] = array(strtotime($r['jour'].' '.$r['heure'])*1000, $r['mesure']);
                }

        }
        
        echo json_encode($result, JSON_NUMERIC_CHECK);
        mysql_close($con);
?>
 
Pour débugger ce truc, je faisait un $array en brut pour voir si ca s'affiche et après je le faisais en dynamique en mettant les informations au bon endroit ...

Re: Selection tables et construction de graphique.

Posté : 28 déc. 2014, 22:38
par dayou05
Parce que en fait, voici mon graphique actuel :
graph.png
Ensuite voila le fichier data.php celui contenu ton code :
<?php
$con = mysql_connect("localhost","admin","admin");

if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("tp_arexx", $con);



        // On selectionne les tables
        $tables = $return = array();
        $result = mysql_query("SELECT `Arexx_Table` FROM `tp_arexx_capteurs`");
        while ($row = mysql_fetch_assoc($result)) {
                  $tables[] = $row['Arexx_Table'];
        }

        // On fait une boucle des tables pour lire leur contenu
        foreach($tables as $k => $v) {
                
                $sth = mysql_query("SELECT `mesure`, `jour`, `heure` FROM `".$v."`");
                while($r = mysql_fetch_array($sth)) {
                 $return[$k][] = array(strtotime($r['jour'].' '.$r['heure'])*1000, $r['mesure']);
                }

        }
        


print json_encode($return, JSON_NUMERIC_CHECK);

mysql_close($con);
?>
Puis le fichier index.php génération du graph : seulement j'ai trouver enfin comment afficher les heures pas les valeurs récupérer dans la tables..
<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Highcharts Example</title>

		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
		<script type="text/javascript">
[javascript]

$(function () {
    var chart;
    $(document).ready(function() {
        $.getJSON("data.php", function(json) {
	    
		    chart = new Highcharts.Chart({
		
		
	            chart: {
	                renderTo: 'container',
					zoomType: 'x',
	                type: 'line',
	                marginRight: 130,
	                marginBottom: 25
		
	            },
	            title: {
	                text: 'Affichage des mesures des capteurs en fonction du temps et de la date.',
	                x: -20 //center
	            },
	            subtitle: {
	                text: 'Vous pouvez effectuer un zoom sur le graphique en maintenant le clique gauche souris sur une zone du graphique',
	                x: -20
	            },
	            xAxis: {
        type: 'datetime',
            tickInterval: 3600 * 1000,
            min: Date.UTC(2013,4,22),
            max: Date.UTC(2013,4,23),
		
    
},
   
	
	            yAxis: {
					 max:50,          // maxi du graphe
    min: -50,           // mini du graphe
    tickInterval: 10,
	                title: {
	                    text: 'Températures °C'
	                },
	                plotLines: [{
	                    value: 0,
	                    width: 1,
	                    color: '#FF0000'
	                }]
	            },
	            tooltip: {
	                formatter: function() {
	                        return '<b>'+ this.series.name +'</b><br/>'+
	                        this.x +': '+ this.y +  ' °C';
						
	                }
										
	            },
	            legend: {
	                layout: 'vertical',
	                align: 'right',
	                verticalAlign: 'top',
	                x: -10,
	                y: 100,
	                borderWidth: 0
	            },
				credits: {
            text: '© Dayan LOMBARDI',

			},
	            
				series: [{
					
                        data: [
json

            //and so on...
        ]
		           
    }]
	        });
	    });
    
    });
    
});
[/javascript]
		</script>
	</head>
	<body>
  <script src="http://code.highcharts.com/highcharts.js"></script>
  <script src="http://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

	</body>
</html>
Etant donner que je réussit a afficher 24h je penser faire une sélection des capteurs grâce a une listbox puis le jour disponible et enregistrer pour ce capteur enregistrer dans la BDD et ainsi afficher le graphique sur 24h ...
Mais si tu me propose autrement, ou si tu peut m'aider à accomplit au moins cela je t'en serait très reconnaissant !

Re: Selection tables et construction de graphique.

Posté : 29 déc. 2014, 00:15
par Elie
On va faire a l'envers ...
Genere moi un tableau comme tu aimerais qu'il s'affiche et après on l'adapte a ta base de données.
C'est pas a moi de te dire les stats que tu veux !

J'affiche les miennes jours par jours : http://www.subsynchro.com/toutes-les-statistiques.html

Re: Selection tables et construction de graphique.

Posté : 29 déc. 2014, 00:33
par dayou05
Alors, en fait voila le cahier des charges :

Je veut crée une première listbox qui récupère les données dans la base de données plus précisément : la colonne Arexx_Name et affiche les données ( nom ) autant de fois qu'il y a de lignes dans la table tp_arexx_capteurs ...
Puis a la suite d'une sélection du capteur, une deuxième listbox s'affichant a côter avec les enregistrement donc les dates disponible pour ce capteur là, pour cela il faut récupéré la valeur de la table correspondante ( Arexx_Table ) et aller dans cette table afin de récupérée les données ( les colonnes ) Mesure, jour, et heure, et ainsi les afficher sous forme de graphique 24h .. puisque l'on sélectionne un jours entier.

1) Une liste box récupérant les données de la table tp_arexx_capteurs plus precisemment la colonne Arexx_Name
2) Si selection du'un capteurs une deuxieme list box avec ces jours enregsitrer disponible.
3) pour cela, récupérer valeur de la colonne Arexx_Table correspondant au capteurs sélectionner
4) aller dans cette table et selectionner les colonne mesure, jour, heure afin d'afficher les mesure sous forme de graphique.

Structure de la base de données dispo plus haut pour plus de compréhension voilà un grand merci à toi, et franchement très beau site ! C'est impressionnant le boulot réaliser !

Re: Selection tables et construction de graphique.

Posté : 29 déc. 2014, 01:08
par Elie
Je vais certainement plus me prendre la tete avec HighChart donc comme je te l'ai dis, fait en sorte que ca marche avec des données fixes imaginaires et après je t'aiderai a rendre ca dynamique

Re: Selection tables et construction de graphique.

Posté : 29 déc. 2014, 01:23
par dayou05
D'accord merci, que s que tu entend par données fixe ? donénes rentrer a la main ?