PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 30/03/2013 08:22:32

damalaan
Membre

créer un tableau multi dimensionnel à partir d'une requête

Bonjour,

Il faut je récupère le résultat d'une requête dans un tableau multimensionnel pour ensuite le passer dans une boucle javascript pour générer des graphiques avec l'api goocle chart.

Dans un premier temps, je dois donc récupérer le tableau :
la requete :

$sql= "select ana_id, sta_date, arrondi(sta_valeur, ana_id) from tbl_stat_sta ";
	$sql.="where sta_esp = 1 and (ana_id between 1 and 2) and (sta_date between '2011-01-01' and '2011-01-31') ";
	$sql.="order by sta_date;";

en fait pour chaque valeur de ana_id je dois construire un nouveau tableau... et c'est là que ça coince!!
pour l'instant j'ai ça mais ça

//construction du tab de données
	  $i=0;
	$result=pg_query($dbconn, $sql);
	while ($row = pg_fetch_array($result)) 
	{
        
 		if ($i===0) {
 		$tableau= "data.setValue(".$i.", 0, '".$row[1]."');";
 		$tableau .= "data.setValue(".$i.", 1, ".$row[2].");";
 		}
 	else
 		{
  		$tableau .= "data.setValue(".$i.", 0, '".$row[1]."');";
  		$tableau .= "data.setValue(".$i.", 1, ".$row[2].");";
 		}
		$i++;
    
	}

mais je ne prends pas les différentes valeurs ana_id en compte

merci

Hors ligne

#2 30/03/2013 08:57:31

damalaan
Membre

Re : créer un tableau multi dimensionnel à partir d'une requête

je viens de découvrir que l'on peut générer du json directement sous postgres :

select row_to_json(row) from (
select 
	ana_id as libelle, 
	sta_date as jour, 
	arrondi(sta_valeur, ana_id)as valeur 
from tbl_stat_sta 
where 
	sta_esp = 1 and 
	(ana_id between 1 and 2) and 
	(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_date) row;

Comment pourrais-je récupérer ça en php ?

Hors ligne

#3 30/03/2013 13:10:40

rjuju
Administrateur

Re : créer un tableau multi dimensionnel à partir d'une requête

Bonjour,

je ne connais pas votre projet ni google chart, mais à priori vous devriez faire un script php qui renvoie la structure json avec les éléments à grapher, et appeler ce fichier en javascript pour le fournir à google chart.

Hors ligne

#4 30/03/2013 19:10:02

damalaan
Membre

Re : créer un tableau multi dimensionnel à partir d'une requête

Le projet est de générer des graphiques "à la volée" en récupérant les données d'une requête

select 
	ana_id as libelle, 
	sta_date as jour, 
	arrondi(sta_valeur, ana_id)as valeur 
from tbl_stat_sta 
where 
	sta_esp = 1 and 
	(ana_id between 1 and 2) and 
	(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_date

il me faut un graphique différent par ana_id (ici 2 mais en réalité environ 20).

J'ai donc découvert que les nouvelles versions de postgresql offrait le format json; c'est pourquoi je voudrais récupérer les données json de ma requête pour les passer ensuite à l'api google chart (je ne sais pas encore comment, mais il lui faut du json!!)

Hors ligne

#5 30/03/2013 20:55:06

rjuju
Administrateur

Re : créer un tableau multi dimensionnel à partir d'une requête

Vous avez la fonction row_to_json ou array_to_json pour transformer une ligne/tableau en json, à partir de la  version 9.2

Hors ligne

#6 30/03/2013 21:40:29

damalaan
Membre

Re : créer un tableau multi dimensionnel à partir d'une requête

c'est bien ce que j'ai fait

select row_to_json(row) from (
select 
	ana_id as libelle, 
	sta_date as jour, 
	arrondi(sta_valeur, ana_id)as valeur 
from tbl_stat_sta 
where 
	sta_esp = 1 and 
	(ana_id between 1 and 2) and 
	(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_date) row;

mais je ne sais pas comment récupérer le résultat de cette requête en php sous forme de tableau json!

Hors ligne

#7 30/03/2013 21:55:12

rjuju
Administrateur

Re : créer un tableau multi dimensionnel à partir d'une requête

Si vous ne voulez qu'un tableau, le plus simple est peut être de le faire directement en php sans utiliser la couche json postgres, par exemple quelque chose du genre :

[...]
$tab = pg_fetch_all($result);
echo json_encode($tab);

filtré par "ana_id". Cela dépend beaucoup du format qu'attend google chart.

Hors ligne

#8 02/04/2013 14:33:43

damalaan
Membre

Re : créer un tableau multi dimensionnel à partir d'une requête

je laisse tomber json, je n'arrive pas à comprendre comment passer ce truc en JS à google chart.

en revanche on peut passer un format du genre :

['2011-01-04', 44.64], ['2011-01-05', 44.70], ['2011-01-06', 43.26]

ça fonctionne parfaitement pour l'avoir déjà tester.

maintenant ma difficulté est de pouvoir créer un tableau du genre:

 
[
1,[[ "2011-01-04","44.64"],[ "2011-01-04","44.53"],[ "2011-01-05","44.90"]],
2,[[ "2011-01-04","37.69"],[ "2011-01-04","34.23"],[ "2011-01-05","34.20"]]
]

afin de mon tableau avec echo $tab[1] qui me renverrait :[ "2011-01-04","44.64"],[ "2011-01-04","44.53"],[ "2011-01-05","44.90"]

les indices du tableau étant les valeurs de ana_id de ma requête de départ

Hors ligne

#9 02/04/2013 16:33:56

damalaan
Membre

Re : créer un tableau multi dimensionnel à partir d'une requête

j'ai fini par faire ça, cela fonctionne, mais s'il y a plus simple, je suis preneur!

 $sql= "select ana_id, sta_date, arrondi(sta_valeur, ana_id) from tbl_stat_sta ";
	$sql.="where sta_esp = 1 and ana_id in(1,2,3,4) and (sta_date between '2011-01-01' and '2011-01-31') order by ana_id,sta_date;";
	
	$i=0;
	$result=pg_query($dbconn, $sql);
	
	$tableau =array();
  	while ($row = pg_fetch_row($result)) 
	{ 
		$ligne = "['".$row[1]."', ".$row[2]."]";
		if ($row[0]===$cle) 
		{
			$tableau[$cle] .= ",".$ligne;
		}
		else{
			$cle=$row[0];
			$tableau[$cle].=$ligne;
		}  
 	} 

	var_dump($tableau); 
	$j= count($tableau);

et en faisant un  $tableau[1] j'obtiens bien les données pour ana_id = 1

['2011-01-04', 44.64],['2011-01-05', 44.70],['2011-01-06', 43.26],['2011-01-07', 44.02]

Hors ligne

Pied de page des forums