Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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.
Julien.
https://rjuju.github.io/
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
Julien.
https://rjuju.github.io/
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.
Julien.
https://rjuju.github.io/
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