You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Monday, September 1st 2008, 9:43am

Grafisches Diagramm mit PHP erzeugen - brauche einen Lösungsansatz

Ich kämpfe grade damit eine Tabelle mit Werten und Daten grafisch als Diagramm auszugeben. Mir will nur nicht recht einfallen wie ich das am besten realisiere.

Meine Tabelle ist folgendermaßen aufgebaut.

Felder: Tag, Monat, Jahr, Wert1, RefID, RefTable

Nun möchte ich das Diagramm so aufbauen, dass die untere Skala die Tage betrifft und die andere den Betrag. Das heißt ich muss zuerst mal den Zeitraum festlegen. Also beim Aufrufen soll der aktuelle Monat und das aktuelle Jahr genommen werden. Für diesen Monat dann alle Tage und für jeden Tag so gesehen einen Punkt im Diagramm. Jetzt brauche ich den maximalen Wert der möglich sein soll + sagen wir 10% damit das nicht doof aussieht. Habe ich ein Bild von 640 mal 512 Bildpunkten muss ich abzüglich bisl Ramen und sowas also 600 Pixel auf die Tage aufteilen und 480 Pixel auf die Werte. Und dann muss ich eigentlich nur noch meine Tabelle durchlaufen und für jeden Tag die eingetragenen Werte in das Diagramm übertragen.

Klingt eigentlich einfach, aber bereitet mir Kopfzerbrechen. Hier mal ein paar Beispiele.

PHP Source code

1
2
$result mysql_query("SELECT max(Wert1) FROM Referenzwerte");
$maxwert $result['Wert1'];

Das will schon mal nicht so wie es soll. Ich weiß das der maximale Wert 23500 ist und den Wert bekomme ich weder so noch auf anderem Weg aus der Tabelle.

Zusätzlich zu dem ganzen möchte ich einen zweiten Strich in meinem Diagramm der den kommulierten Wert anzeigt. Heißt es gibt eine weitere Tabelle in der ebenfalls Zahlen stehen und pro Tag gibt es jeweils dann einen Wert in beiden Tabellen. Die Zahl die ich ausgeben möchte berechnet sich aus Tabelle1.Wert1*100/Tabelle2.Wert1 und soll aus dem Vormonat schon als Übertrag berücksichtigt werden damit das Diagramm nicht bei 0 anfängt.

Nun, ich hoffe mir kann da einer ein paar Ideen geben wie ich das so löse, das ich nicht auch noch 20 Abfragen auf die DB benötige da die Datenbank so schon mächtig groß ist und wenn ich dort jetzt auch noch x Abfragen erzeuge wird das ganze langsamer als es so schon ist.

EDIT:
So, ich habe es (mehr oder weniger) jetzt hin bekommen. Meine DB Abfrage liefert mir noch nicht die Werte die ich gerne hätte aber gut, das hat nichts mit der Bilderzeugung zu tun. Das ganze klappt jetzt wunderbar.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

ShaoKhan

www.Spiegelwelt.com

Posts: 393

Location: 127.0.0.1

Occupation: EDV Dienstleister

  • Send private message

2

Wednesday, September 3rd 2008, 1:13pm

Hallo Prometheus,

schau dir mal das hier an: http://www.aditus.nu/jpgraph/
Das nutz ich zum Beispiel.
Leben heisst - Narben tragen.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Thursday, September 11th 2008, 9:15am

Also irgendwie macht mich das ganze langsam richtig irre. Nicht nur das ich immer noch nicht fertig bin damit. Je mehr ich mache desto weniger bin ich mir sicher ob das echt der beste Weg dafür ist.

Für die Skala brauche ich z.B. die Maxwerte aus einer Tabelle. Das heißt die Skala geht von 0 bis 1,5 mal Maxwert aus der Tabelle. Um die Maxwert zu bekommen hab ich mir eine kleine Funktion geschrieben. Ich weiß das ich mit max(feld) arbeiten kann allerdings hat auch das nicht geklappt deshalb hatte ich das ganze so umgebaut, dass es "verständlicher" wird um den Fehler zu sehen.

PHP Source code

1
2
3
4
5
6
7
8
9
10
function getmaxumsatz($wg$monat$jahr)
{
    $tmpstring "umsatzwg".$wg;
    $getmaxumsatz mysql_query("SELECT * FROM umsatz WHERE monat = '".$monat."' AND jahr = '".$jahr."'");
    while($rowumsatz=mysql_fetch_array($getmaxumsatz))
    {
        if($absmaxumsatz<$rowumsatz['$tmpstring']) $absmaxumsatz $rowumsatz['$tmpstring'];
    }
    return $absmaxumsatz;
}

Die Funktion liefert in jedem Fall 0 egal ob das Feld irgendwas enthält oder nicht. Und ich sehe einfach den Fehler nicht!

Dann würde ich gerne den Umsatz als Linie einzeichnen. Dazu hole ich mir pro Tag den Umsatz aus der Tabelle und errechne zuerst welchen Wert ein Pixel hat um dann für den Umsatz an dem Tag die Pixel zu bekommen. Also gehe ich vom unteren Punkt aus und ziehe die Pixel dem Umsatz entsprechend für diesen Tag ab. Das Problem ist ich kann das nicht testen da ich die Pixel anhand des Maxwerts aufteile und diesen bekomme ich ja wie oben geschrieben nicht. Ich weiß also nicht mal ob das klappt da mir das Skript einen Fehler bringt wenn ich den Teil nicht auskommentiere.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

4

Monday, October 20th 2008, 6:58pm

Nun also ich bin mit dem Thema der Grafiken schon ein gutes Stück weiter. Allerdings habe ich da mal eine grundlegende Frage. Kann es sein, dass ich beim Erzeugen einer Grafik mit PHP nicht auf Funktionen zurück greifen kann welche in einer separaten Datei gelagert sind? Ich habe z.B. eine DB Abfrage, welche ich in eine Funktion packen wollte da ich diese pro Aufruf des Skripts etwa 30 mal brauche. Sobald ich die Funktion dann aber in meine Datei packe bekomme ich keine Werte mehr zurück. Liegt die funktion unverändert in der gleichen Datei in welcher die Grafik erzeugt wird funktioniert es ohne Fehler. Ich könnte mir höchstens noch vorstellen das ich vergessen habe irgend eine Variable zu globalisieren aber das kann es doch normal auch nicht sein oder?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

5

Thursday, October 23rd 2008, 12:00pm

RE: Grafisches Diagramm mit PHP erzeugen - brauche einen Lösungsansatz

Quoted

Original von Prometheus

PHP Source code

1
2
$result mysql_query("SELECT max(Wert1) FROM Referenzwerte");
$maxwert $result['Wert1'];



dass das so klappt wage ich auch zu bezwifeln, weil dein query gibt dir ja ein result zurück und noch nicht das fertige array. außerdem hast du im select max(Wert1) stehen und nicht wert1. da gibts jetzt zwei möglichkeiten

PHP Source code

1
2
3
$result mysql_query("SELECT max(Wert1) FROM Referenzwerte");
$aResult mysql_fetch_row($result)
$maxwert $aResult['max(Wert1)'];


oder

PHP Source code

1
2
3
$result mysql_query("SELECT max(Wert1) as maxwert1 FROM Referenzwerte");
$aResult mysql_fetch_row($result)
$maxwert $aResult['maxwert1'];


hilft dir zwar bei deinem grafikproblem nicht weiter, aber vielleicht hilfts in zukunft ohne lästige php funktionen auszukommen die dir den maxwert suchen.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

6

Friday, October 24th 2008, 9:08pm

Ich hatte noch ein paar mehr Bugs in meinem Skript. Allerdings inzwischen ist alles soweit gut. Hab es auch hin bekommen meine über 1000 Code Zeilen auf knapp über 300 zu reduzieren und mal etwas bedachter mit Abfragen umzugehen.

Jetzt müsste ich nur noch eine Funktion hin bekommen das ich in meinem Diagramm keine graden Linien mehr hab sondern schöne geschwungene Kurven. Aber das bekomm ich auch noch hin ;)
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel