Langsamer Code!

Maxe

Grünschnabel
Hi!

Ich habe einen Code geschrieben, der aber leider äusserts langsam ist! Ich wollte mal fragen, ob da vielleicht jemand Abhilfe weiss.

Erstmal habe ich 180 Faktoren:

$faktor[] = 0.7300;//0
$faktor[] = 0.7300;
$faktor[] = 0.7300;
$faktor[] = 0.7300;
$faktor[] = 0.7300;
.
.
.

Dann 180 Artikelnummern:

$artnr[] ="000006" ; //0
$artnr[] ="000011" ;
$artnr[] ="000016" ;
$artnr[] ="000030" ;
$artnr[] ="000040" ;
$artnr[] ="000106" ;
.
.
.

Und dann folgenden Code:
PHP:
$zahl = 0; 
while($zahl <= 179) 
{ 
$query = "SELECT Kstmenge01 FROM kswkst99 where Kstkunde like '$Knummer' and Kstartikel = '$artnr[$zahl]'"; 
$result = odbc_exec($dbh, $query); 
$Menge = odbc_result($result, 1); 
if($Menge >0){ 
//echo $Menge."<br>"; 
$Unf[$zahl]= $Menge * $faktor[$zahl]; 
} 
$zahl++; 
}

und das 12mal.

Ich berechne so Absatzzahlen für einzelne Monate. Die verschiedenen Artikel werden mit den Faktoren multipliziert und aus den Ergebnissen bilde ich nachher die Summe.


Ich weiß halt leider nicht, wie ich die Daten anders rauslesen kann! :(
Wahrscheinlich dauern die vielen Querrys so lange...


Nach 60 Sekunden bekomme ich dann eine Fehlermeldung. Bei 3 Monaten funktioniert es, aber leider dauerts.....

Wird sowas besser mit function gemacht?

Danke im vorraus! :)

Gruss Maxe
 
Also erstmal hi Chris :)
haste endlich mal meinen Rat bevolgt was ein gutes Forum zu PHP angeht ;)

Also die 60 Sekunden sind die max execution time die du hochsetzen muss.

mit z.B
void set_time_limit ( int seconds)

Damit kannst du temporär die max excution time hochsetzen.

Wenn du zugriff auf die apache http.conf kannst du das da direkt setzen timeout

Zur beschleunigung deines scripts. Wie sieht es aus ist der faktor immer 0.7300???

Bzw wieso gehst du über odbc? welche datenbank steuerst du an?

Da du immer eine Spalte aus der Datenbank ausliest würde es sich eventuell lohnen einen riesen query zu basteln statt mehrere Abfragen zu senden
das sähe dann so aus

ungetesteter code
Code:
$sql = " SELECT Kstmenge01 FROM kswkst99 ";   
for($i=0; $i<=179,$i++)
{
 if(!$i)
      $sql.= " where ";
 else
      $sql.= " and ";
 $sql .= " '$Knummer' and Kstartikel = '$artnr[$i]; 
}

Vorteil du sendest einen Query und bekommst von der Datenbank schön säuberlich einen result.

Dürfte die performance steigern.
 
ich weiss nicht wozu das if und else gut sein soll, da er ja alle i´s durchlaufen soll!

hmmm... also das

PHP:
$sql = "SELECT Kstmenge01 FROM kswkst99 where";
for($i=0; $i<=179; $i++)
{

$sql.= " Kstkunde like '$Knummer and Kstartikel = '$artnr[$i]'";

$result = odbc_exec($dbh, $sql);
$Menge = odbc_result($result, 1);
funktioniert nicht!
Keine Ahnung wieso...

Gruss Chris
 
Sorry ändere mal

Code:
if(!$i)
      $sql.= " where ";
 else
      $sql.= " and ";
in

Code:
if(!$i)
      $sql.= " where ";
 else
      $sql.= " or ";

Dann sieht der Querry wie folgt aus
kundennr sei abc

SELECT Kstmenge01 FROM kswkst99 where
Kstkunde like 'abc' and Kstartikel = '1' or Kstkunde like 'abc' and Kstartikel = '2' or Kstkunde like 'abc' and Kstartikel = '3' or Kstkunde like 'abc' and Kstartikel = '4'
usw
 
Zurück