Hallo,
ich habe ein Problem mit einem Diagramm, welches veranschaulichen soll wie lange ein User ein Programm benutzt hat, dazu speichert das Programm für jede einzelne Stunde in einer MySQL Datenbank die Zeit, welche anschließend in PHP über ein Diagramm veranschaulicht werden soll. Mein Problem dabei ist folgendes:
Da ein User das Programm ja nicht unbedingt 24 Stunden an 7 Tagen in der Woche verwendet gibt es in der Datenbank natürlich auch Stunden, welche garnicht darin stehen, also kann ich nun nicht sagen, dass er einfach die letzten 168 EInträge ausliest (168 = 27*7) um von jedem Tag die einzelnen Zeiten von 0 bis 23 Uhr anzuzeigen. Nun ist die Frage für mich, wie ich nun festlegen kann, dass er immer von 0 bis 23 Uhr ausliest und dann leere Zeiten mit 0 ausgibt und auch die Einzelnen Daten der letzten 7 Tage vom heutigen an nach hinten hin den einzelnen Zeiten pro Stunde zuordnet.
Ich wollte das ganze mit diesem Diagramm veranschaulichen: http://jpgraph.net/features/src/s…et=new_bar1.php
Mein Ansatz bisher war folgender:
<?php
require_once ('../../jpgraph/src/jpgraph.php');
require_once ('../../jpgraph/src/jpgraph_bar.php');
$verbindung = mysql_connect ("dbadresse",
"dbuname", "dbpasswort")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("dbname")
or die ("Die Datenbank existiert nicht.");
$id=$_SESSION['UserID'];
$sql = "SELECT Nickname FROM User WHERE ID='$id'";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
$name=$row['Nickname'];
$sql = "SELECT * FROM zeitlog WHERE username='$name' ORDER by datum DESC LIMIT 168";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$datum = array();
$zeit = array();
while ($row = mysql_fetch_object($result))
{
$datum[] = date("d.m.Y",$row->datum);
$zeit[] = $row->minuten;
}
$data1y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data2y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data3y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data4y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data5y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data6y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$data7y=array($zeit[0], $zeit[1], $zeit[2], $zeit[3], $zeit[4], $zeit[5], $zeit[6]);
$graph = new Graph(600,400,'auto');
$graph->SetScale("textlin");
$theme_class=new UniversalTheme;
$graph->SetTheme($theme_class);
$graph->yaxis->SetTickPositions(array(60,120,180,240,300,360,420,480,540,600), array(30,90,150,210,270,330,390,450,510,570));
$graph->SetBox(false);
$graph->ygrid->SetFill(false);
$graph->xaxis->SetTickLabels(array($datum[0], $datum[1], $datum[2], $datum[3], $datum[4], $datum[5], $datum[6]));
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);
// Create the bar plots
$b1plot = new BarPlot($data1y);
$b2plot = new BarPlot($data2y);
$b3plot = new BarPlot($data3y);
$b4plot = new BarPlot($data4y);
$b5plot = new BarPlot($data5y);
$b6plot = new BarPlot($data6y);
$b7plot = new BarPlot($data7y);
// Create the grouped bar plot
$gbplot = new GroupBarPlot(array($b1plot,$b2plot,$b3plot,$b4plot,$b5plot,$b6plot,$b7plot));
// ...and add it to the graPH
$graph->Add($gbplot);
$b1plot->SetColor("white");
$b1plot->SetFillColor("#cc1111");
$b2plot->SetColor("white");
$b2plot->SetFillColor("#11cccc");
$b3plot->SetColor("white");
$b3plot->SetFillColor("#1111cc");
$b4plot->SetColor("white");
$b4plot->SetFillColor("#cc11cc");
$b5plot->SetColor("white");
$b5plot->SetFillColor("yellow");
$b6plot->SetColor("white");
$b6plot->SetFillColor("red");
$b7plot->SetColor("white");
$b7plot->SetFillColor("blue");
$graph->title->Set("Statistik von $name");
// Display the graph
$graph->Stroke();
?>
Alles anzeigen
Wie man erkennen kann finktioniert das so nun nicht wirklich so, wie ich es mir erhofft habe. Wäre schön, wenn mir geholfen werden könnte!
Gruss
Hannibal