Hallo liebe Forengemeinde,
ich habe ein Script erstellt, das die Ergebnisse aus einer Datenbank mit Bowlingeinzelergebnissen (ca.16000) grafisch auswerten soll.
Zu diesem Zweck läuft das Script in einer Schleife über alle infragekommenden Spieler. In dieser Schleife wiederum läuft eine weitere Schleife über jeden Tag des Abfragezeitraumes und führt diverse Mysql Selects aus und füllt jeweils ein Array.
Die Laufzeit ist bei einem halben Jahr bereits be ca.50 Sekunden. Ich habe jedoch Daten aus bis jetzt 8 Jahren in der DB.
Jetzt würde ich mich freuen, wenn mir jemand bei der deutlichen Verkürzung der Laufzeit helfen könnte.
Vielen Dank,
Stephan
Hier der Code (ist leider etwas länger):
ich habe ein Script erstellt, das die Ergebnisse aus einer Datenbank mit Bowlingeinzelergebnissen (ca.16000) grafisch auswerten soll.
Zu diesem Zweck läuft das Script in einer Schleife über alle infragekommenden Spieler. In dieser Schleife wiederum läuft eine weitere Schleife über jeden Tag des Abfragezeitraumes und führt diverse Mysql Selects aus und füllt jeweils ein Array.
Die Laufzeit ist bei einem halben Jahr bereits be ca.50 Sekunden. Ich habe jedoch Daten aus bis jetzt 8 Jahren in der DB.
Jetzt würde ich mich freuen, wenn mir jemand bei der deutlichen Verkürzung der Laufzeit helfen könnte.
Vielen Dank,
Stephan
Hier der Code (ist leider etwas länger):
PHP-Code:
$datax = array();
$data = array();
$color = array("white","red","green","blue","black","orange","pink","brown","purple","lightskyblue","lightgreen",
"lightred","darkblue","darkgreen","darkred","aquamarine","blueviolet","bisque","cornflowerblue",
"deeppink","darkgoldenrod","salmon1","wheat1","magenta","navy","mediumpurple","olivedrab4","orangered2",
"palegreen3","snow3","springgreen","skyblue","plum3","yellowgreen","tan","tan1","turquoise","turquoise4",
"olivedrab2");
$linie = array();
$von_stamp = sql2stamp($von_datum);
$bis_stamp = sql2stamp($bis_datum);
$sql_neu=$sql;
// Grafik anlegen
$graph = new Graph(800,600,"auto");
$graph->SetScale("datlin");
$graph->img->SetMargin(50,90,40,50);
$sqlbef= "SELECT DISTINCT bow_spiele.passnr as passnr, bow_spieler.name as nname, bow_spieler.vorname as vname
FROM bow_spiele, bow_spieler, bow_wettkampf, bow_orte".$sql_tab5."
WHERE bow_spieler.passnr = bow_spiele.passnr
AND bow_wettkampf.nr = bow_spiele.wettkampf
AND bow_orte.nr = bow_spiele.ort
AND bow_spiele.datum >= '".$von_datum."'
AND bow_spiele.datum <= '".$bis_datum."'
AND ".$sql_neu." ".$sql_group1;
$result = mysql_query($sqlbef,$link);
if ($einzel == 1)
{
//***************************************************************************************************
// Schleife über alle Spieler
//***************************************************************************************************
while ($spieler = mysql_fetch_array($result))
{ //Anfang Spieler-Schleife
$sql_neu = "bow_spiele.passnr = ".$spieler[passnr]." AND ".$sql;
$erst_wert = 0;
$u = 0;
//Farbenzaehler
$r++;
//***************************************************************************************************
// Schleife über alle Tage
//***************************************************************************************************
for ($i = $von_stamp; $i <= $bis_stamp ;$i = $i+86400)
{
// Tageszaehler
$u++;
// Soll die Schnittentwicklung oder der -verlauf ermittelt werden?
if ($entwicklung == 0)
{
$k= "=";
$l= "verlauf";
}
else
{
$k = ">= ".$von_datum." AND bow_spiele.datum <= ";
$l= "entwicklung";
}
// Prüfen, ob der Wert des Tages leer ist (kein Ergebnis an diesem Tag)
$sqlbef2= "SELECT max(bow_spiele.datum) as datum
FROM bow_spiele, bow_spieler, bow_wettkampf, bow_orte".$sql_tab5."
WHERE bow_spieler.passnr = bow_spiele.passnr
AND bow_wettkampf.nr = bow_spiele.wettkampf
AND bow_orte.nr = bow_spiele.ort
AND bow_spiele.datum = '".date("Y-m-d",$i)."'
AND ".$sql_neu." ".$sql_group1;
$result2 = mysql_query($sqlbef2,$link);
$akt_erg = mysql_result($result2,0, "datum");
if ($akt_erg == '')
{
if($erst_wert != 0)
{
$schnitt = '-';
$data[]=$schnitt;
}
else
{
$data[] = "";
}
}
else
{
$sqlbef1= "SELECT max(bow_spiele.passnr) as passnr, max(bow_spieler.name) as nname, max(bow_spieler.vorname) as vname, max(bow_spiele.datum) as datum, sum(bow_spiele.wert) as wert, count(bow_spiele.wert) as anzahl
FROM bow_spiele, bow_spieler, bow_wettkampf, bow_orte".$sql_tab5."
WHERE bow_spieler.passnr = bow_spiele.passnr
AND bow_wettkampf.nr = bow_spiele.wettkampf
AND bow_orte.nr = bow_spiele.ort
AND bow_spiele.datum ".$k." '".date("Y-m-d",$i)."'
AND ".$sql_neu." ".$sql_group1;
$result1=mysql_query($sqlbef1,$link);
$row = mysql_fetch_array($result1);
$erst_wert = 1;
$schnitt = $row["wert"]/ $row["anzahl"];
$data[]=($schnitt);
}
// Nur beim jeweils ersten Tag wird der Name ermittelt
if ($u == 1)
{
$name_kompl =$row["vname"]." ".$row["nname"];
}
// Nur beim ersten Spieler werden die Werte für die X-Achse aufgenommen
if ($r==1)
{
if ($i == 0)
{
$datax[] = date("d.m.Y",$bis_stamp);
}
else
{
$datax[] = date("d.m.Y",$i);
}
}
}
//Zeichnen der Linie
if ($u > 500)
{
$w = 2;
}
else
{
$w = 3;
}
$lineplot=new LinePlot($data);
$lineplot->SetLegend($name_kompl);
$lineplot->SetColor($color[$r]);
$lineplot->mark->SetType(MARK_FILLEDCIRCLE);
$lineplot->mark->SetFillColor($color[$r]);
$lineplot->mark->SetColor($color[$r]);
$lineplot->mark->SetWidth($w);
// Hinzufügen der Linien zur Grafik
$graph->Add($lineplot);
$data=array();
$datax2 = array();
} //Ende Spieler-Schleife
}
Kommentar