hallo liebe Leute,
ich habe ein kleines Script, welches eine DB Ausgabe verarbeiten soll. ich weiß ich könnte es mit ini_set weiter erhöhen könnte, doch das würde ein Problem nicht lösen.
derzeit werden ca. 1600 Datensätze zum rechnen verwendet, Tendenz steigend. Ich suche nun einen Weg das Script schlanker zu machen, da ich denke die Daten werden mehr. Kann mir jemand einen Rat/Tipp geben?
achso hier die Error Ausgabe:
ein Rennen vorher war alles ok.
hier einmal das Script:
ich habe ein kleines Script, welches eine DB Ausgabe verarbeiten soll. ich weiß ich könnte es mit ini_set weiter erhöhen könnte, doch das würde ein Problem nicht lösen.
derzeit werden ca. 1600 Datensätze zum rechnen verwendet, Tendenz steigend. Ich suche nun einen Weg das Script schlanker zu machen, da ich denke die Daten werden mehr. Kann mir jemand einen Rat/Tipp geben?
achso hier die Error Ausgabe:
Fatal error: Allowed memory size of 381681664 bytes exhausted (tried to allocate 2147483649 bytes) in C:\xampp\htdocs\cup\scripts\staende\cupStand1.php on line 68
hier einmal das Script:
PHP-Code:
<?php
//Laufzeit hochsetzen
ini_set('max_execution_time', 120); //120 seconds = 2 minutes
ini_set("memory_limit","364M");
// Einbinden Konfig
require_once("../maincome.php");
//Inhalt
//Tabelleninhalt löschen
$sql = "TRUNCATE TABLE `".JAHR."`";
$erg = $mysqli ->query($sql);
/*Alle Teilnehmerergebnisse des aktuellen Jahres abfragen*/
$sql = "SELECT DISTINCT
`cupwertung`.`ID`,
`Pos`,
`PosinKls`,
`Teilnehmer_ID`,
`Name`,
`Verein`,
`Klasse`,
`Punkte`,
`UCI_Code`,
`Rennen`,
`AK_Punkte`
FROM `cupwertung`
JOIN `rennen` ON `rennen`.`id`= `cupwertung`.`Rennen`
WHERE `cupwertung` .`Cup`= '1'
AND `rennen`.`date` BETWEEN '2017-01-01' AND '2017-12-31'
ORDER BY `Teilnehmer_ID` ASC
";
//Ergebnis abfragen
$result=$mysqli->query($sql);
if(FALSE===$result)
{
die(mysqli_error($mysqli));
echo '<div class="error">Abfrage nach Teilnehmerergebnissen nicht möglich!</div>';
}
// Wenn Query ok war.
else{
$i= 0;
$teilnehmer = array();
$teilnehmer[$row['Teilnehmer_ID']]= array();
$insert = array();
while($row=$result->fetch_assoc()){
#Teilnehmerwertungen
$teilnehmer[$row['Teilnehmer_ID']]['Punkte'][$i] = $row['Punkte'];
$teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte'][$i] = $row['AK_Punkte'];
$i++;
#errungene Punkte nach Wertigkeit ordnen
arsort($teilnehmer[$row['Teilnehmer_ID']]['Punkte']);
arsort($teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte']);
#zählen wieviele Rennen gefahren wurden
$anzahl_Rennen[$row['Teilnehmer_ID']] = count($teilnehmer[$row['Teilnehmer_ID']]['Punkte']);
# Streichergebnisse wenn mehr als Gewertet gefahren wurden
if( $anzahl_Rennen[$row['Teilnehmer_ID']] >= GEWERTET){
$bonus[$row['Teilnehmer_ID']] = ( $anzahl_Rennen[$row['Teilnehmer_ID']]- GEWERTET)*10;
$teilnehmer[$row['Teilnehmer_ID']]['Punkte']= array_slice($teilnehmer[$row['Teilnehmer_ID']]['Punkte'],0,GEWERTET);;
$teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte']= array_slice($teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte'],0,GEWERTET);;
$punkte[$row['Teilnehmer_ID']] = array_sum($teilnehmer[$row['Teilnehmer_ID']]['Punkte'])+ $bonus[$row['Teilnehmer_ID']];
$AK_punkte[$row['Teilnehmer_ID']] = array_sum($teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte'])+$bonus[$row['Teilnehmer_ID']];
}
#wenn maximale Rennanzahl noch nicht erreicht wurde
else{
$punkte[$row['Teilnehmer_ID']] = array_sum($teilnehmer[$row['Teilnehmer_ID']]['Punkte']);
$AK_punkte[$row['Teilnehmer_ID']] = array_sum($teilnehmer[$row['Teilnehmer_ID']]['AK_Punkte']);
$bonus[$row['Teilnehmer_ID']] = NULL;
}
#Query erzeugen
$insert[$row['Teilnehmer_ID']] ="
('".$row['Teilnehmer_ID']."'/*Teilnehmer ID*/,
'".$row['Name']."'/*Teilnehmername*/,
'".$row['Verein']."'/*Verein*/,
'".$row['Klasse']."'/*Altersklasse*/,
'".$punkte[$row['Teilnehmer_ID']]."'/*Gesamtpunkte*/,
'".$row['UCI_Code']."'/*UCI- Code*/,
'".$AK_punkte[$row['Teilnehmer_ID']]."'/*AK Punkte*/,
'".$anzahl_Rennen[$row['Teilnehmer_ID']]."'/*Anzahl Wettkämpfe*/,
'".$bonus[$row['Teilnehmer_ID']]."'/*Bonus für Streichrennen*/)";
} //end while
} //end_else
$sql1 = "INSERT INTO `2017`(
`ID_Nummer`,
`Name`,
`Verein`,
`Klasse`,
`Punkte`,
`UCI_Code`,
`AK_Punkte`,
`Anzahl_Rennen`,
`Bonus`)
VALUES ";
$anzahl = count($insert);
$x=0;
foreach($insert as $var){
$sql1 .= $var;
if($x <$anzahl-1 ){
$sql1 .= ',';
}
else{
$sql1 .= '';
}
$x++;
}//ende for
echo '<pre>'.$sql1.'</pre>';
//$result1= $mysqli->query($sql1);
//$result1= TRUE;
if(FALSE===$result1)
{ echo"<h2 class='error'>Aktualisierung der Rangliste in Jahrestabelle ist nicht erfolgt!</h2>";
die(mysqli_error($mysqli));
} else{
echo"<h2 class='info'>Aktualisierung der Rangliste in Jahrestabelle war erfolgreich!</h2>";
}
$result->close();
?>
Kommentar