Daten aus Datenbank in Array für Diagramm

Guten Tag

Ich habe anhand dieses Tutorials JPGraph - Einführung - Tutorial ein Diagramm erstellt.

<?php

include ("jpgraph.php");
include ("jpgraph_line.php");

$graph = new Graph(300,200,"auto");
$graph->SetScale("textlin");

    $ydata = array(4,6,8,10);

$lineplot=new LinePlot($ydata);
    $graph->Add($lineplot);

$graph->title->Set("Temperaturverlauf");
    $graph->title->SetFont(FF_FONT1,FS_BOLD);
        $graph->xaxis->title->Set("Zeit; 1 = 6min");
        $graph->yaxis->title->Set("Temperatur in Grad Celsius");
    $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->img->SetMargin(40,20,20,40);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
    $graph->SetShadow();
        $graph->Stroke();
?>

Nun möchte ich aus meiner PostgreSQL Datenbank die Daten für den Array holen und das Ziel wäre es ein dynamisches Diagram zu erstellen welches sich aktualisiert sobald neue Wetterdaten in die Datenbank gespeichert werden. Hat mir dazu jemand ein paar Ideen?
Als Beispiel dass immer die 10 neuesten Einträge in das Diagram übernommen werden.

In der Tabelle befinden sich ein Primary Key (Timestamp) und die Wetterdaten

Das Timestamp Format ist dieses hier. “2008-03-12 15:03:00+01”

Besten Dank für eure Hilfe

Du hast eine DB, einen Webserver, ein PHP und einen Client mit Browser. Außerdem kommen, wie auch immer, Daten in die DB.

Die kann, via Listen/Nofify, ein externes Event auslösen. Aber was nicht gehen wird: dem Browser des Clients sagen, es möge die Seite neu laden.

Der Client wird also, wie auch immer, die Seite neu anfordern müssen. Dann kann der Indianer, ähm Apache, via PHP die Daten neu vom DB-Server anfordern. Für das SQL, das Du brauchst, die letzten 10 Daten zu holen, wirst Du die Begriffe LIMIT, ORDER, DESC sinnvoll in Deine Abfrage einbauen müssen.

Andreas

mal dahin-gebrainstormt … ob das mit postgres funzt kann ich natuerlich nicht sagen … aber ich kann mir vorstellen dass dies geht:

(POST request) -> irgendwas updated irgendwo daten -> trigger -> temp-table mit diagrammdaten fuellen -> (POST result) anzeigen

da braucht man keine events …

---- Nachtrag -----
er sollte sich mal anschauen wie Web-Chats funktionieren … es gibt ja jetzt ja auch das tolle AJAX :slight_smile: damit kann man dann zaubern

symbiont: und wie wird in deinem Request der nächste POST Request ausgelöst?

quasi das gleiche … das war schon immer so … deswegen kriegst du ja auch immer gleich nach dem du im web z.B formular-daten abschickst “irgendwann” ein ergebnis … dieses GET bzw POST (was ja technisch dass gleiche ist) arbeitet ja synchron … auch wenn HTTP verbindungslos ist.

ich denke aber ohnehin, dass er es etwas “komplizierter” braucht … was fuer ihn bedeutet dass er wahrscheinlich am ende nicht ohne JavaScript gefrickel umherkommt.

– NACHTRAG —
denn so wie ich es inzwischen verstehe kommen die input-daten aus einer anderen quelle … nicht von da wo das diagram angezeigt wird … das macht es kompliziert … und da hilft nur “pollen” … oder bissel fantasiereicher applet flash etc. da kann man veilleicht die client-seite eleganter dazu bewegen mal nachzugucken obs “neue” daten gibt …

Guten Tag Andreas

Ja, das ist so geplant dass die Seite neu angefordert wird. Wie ich die letzten 10 Einträge abfrage habe ich auch verstanden, ich verwende als Beispiel diesen Code:

SELECT weatherdata FROM inside_temp ORDER BY savetime DESC LIMIT 10

Wenn ich nun das Resultat dieser Abfrage in eine Variable, beispielsweise $resultat speichere kann ich dann diese Variable für den Array verwenden? Das hat bei mir immer Fehler verursacht.

Ja, man kann das speichern. Nein, wir können nicht helfen, solange die Fehlermeldung geheim ist. Das ist außerdem offenbar eher ein PHP-Programmierfehler auf Layer 8.

Andreas

Achso verstehe, soll ich es mal im PHP Forum versuchen?

edit. So, ich habe mal in der PHP Manual nach array gesucht und konnte nun folgendes erstellen;

  $result = pg_query($dbconn, "SELECT savetime, weatherdata FROM outside_temp ORDER BY savetime DESC LIMIT 5");
        if (!$result) {
            echo "Ein Fehler ist aufgetreten.\n";
            exit;
    }


    $arr = pg_fetch_array($result, 0, PGSQL_NUM);
    echo $arr[0];
    echo $arr[1];
        echo "
\n";

$arr = pg_fetch_array($result, 1, PGSQL_NUM);
    echo $arr[0];
    echo $arr[1];
        echo "
\n";

Das funktioniert tadellos, soweit so gut.
Nun sollte ich diese Resultate in mein Diagramm einfügen können unter dem Bereich

$ydata = array(0,1,2,3,4);

und da stehe ich an. Ich verstehe nicht ganz wie ich diese Werte da einfügen kann.

Vielleicht. Möglicherweise wird man Dich dort auffordern, via Google mal Beispielcode für das Zusammenspiel von PostgreSQL und PHP zu suchen. Vorausschauend, wie ich bin, hab ich Dir das mal schon abgenommen und u.a. dies hier gefunden: PostgreSQL - Informationen, Tutorials, Ressourcen [PostgreSQL und PHP] .Neben ca. 750.000 anderen Seiten.

Andreas

Probiers mal so:

while($arr = pg_fetch_array($result, 1, PGSQL_NUM)) {
  $ydata[] = $arr['<feldname/oder Spaltennr>'];
}