Plz help!

Maxe

Grünschnabel
Hallo!
Ich habe hier immernoch ein Scriptproblem, welches ich nicht lösen kann! :(

Folgende Abfrage funktioniert, muss aber 180 mal wiederholt werden. Dauert einfach zu lange!


$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++;
}


Für querry bekomme ich folgendes:
SELECT Kstmenge01 FROM kswkst99 where Kstkunde like '110250' and Kstartikel = '000006'

Nun habe ich drei weitere mögliche Querrys, die die Geschichte beschleunigen sollen, und ich denke auch richtig sind.


SELECT Kstmenge01 FROM kswkst99 where (Kstkunde like '110250' and Kstartikel = '000006') or (Kstkunde like '110250' and Kstartikel = '000011') or (Kstkunde like '110250' and Kstartikel = '000016') or (Kstkunde like '110250' and Kstartikel = '000030') or (Kstkunde like '110250' and Kstartikel = '000040') or (Kstkunde like '110250' and Kstartikel = '000106') or (Kstkunde like '110250' and Kstartikel = '000110') or .......




SELECT Kstmenge01 FROM kswkst99 where Kstkunde = '110250' and Kstartikel in ('000006', '000011', '000016', '000030', '000040', '000106', '000110', '000111', '000115', '000116', '000130', '000131'.........., '520166', '520175')



SELECT Kstmenge01 FROM kswkst99 where Kstkunde like '110250' and (Kstartikel = '000006' or Kstartikel = '000011' or Kstartikel = '000016' or Kstartikel = '000030' or Kstartikel = '000040' or Kstartikel = '000106' or Kstartikel = '000110'..............)


Zurück bekomme ich ja ein Array, aber wie lese ich die Daten daraus??
Ein Vorschlag war folgender:
PHP:
$e = odbc_exec($dbh, $sql);
while($result = odbc_fetch_row($e))
{
   $dasFeld = $result[0];
   echo $dasFeld;
Das funktioniert aber leider nicht! :(

Für eine Hilfe wäre ich sehr dankbar!

Gruß Maxe
 
Machs doch anderst :-)
PHP:
for($i=0, $z=179; $i<=$z; $i++)
{
  $zahl[] = $i;
}


$query = "SELECT Kstmenge01 FROM ";
$query.= "kswkst99 ";
$query.= "WHERE Kstkunde like '$Knummer' ";
$query.= "AND Kstartikel IN (".implode(", ", $zahl).")"; 

$result = odbc_exec($dbh, $query);
 
while($rows = odbc_fetch_row($result))
{
   $dasFeld = $rows[0];
   echo $dasFeld;
So hast du nur einen SQL String. Mach noch auf das Feld Kstartikel einen INDEX drauf, das versiebenfacht die Geschwindigkeit der Datenbank!

Was willst du hiermit machen?
PHP:
if($Menge >0){ 
//echo $Menge."<br>"; 
$Unf[$zahl]= $Menge * $faktor[$zahl]; 
} 
$zahl++; 
}
Habe das leider nicht ganz verstanden. Erkläre mal, dann kann ich dir vielleicht auch damit helfen!

Gruß
Fati
 
Thx Fati!
Kurz bevor ich dein Post gelesen habe, hat es gerade geklappt! Ist ja meistens so...aber dennoch danke für die Antwort!

PHP:
if($Menge >0){ 
//echo $Menge."<br>"; 
$Unf[$zahl]= $Menge * $faktor[$zahl]; 
} 
$zahl++; 
}

Sollte eigentlich die Geschwindigkeit erhöhen... hatte zumindest ich mir so gedacht ;) , aber der Flaschenhals waren wohl einfach nur die vielen Selects!

Die Daten kriege ich jetzt jedenfalls, aber auch nur die, für die Artikel die für den Lieferanten eingetragen sind. Als nie alle 180...
Ich muss aber jedem Artikel einen festen Faktor zuordnen. Und das wollte ich per arrays machen.

also:
PHP:
$zahl=0;
while($zahl <= 179)
{
$Unf = $Menge[$zahl] * $faktor[$zahl]
$zahl++;
}
usw.....
Also wenn bei einer dieser 180 Abfragen nichts zurückkam, war es ziemlich egal..... war das Ergebnis halt null.

Aber nach der neuen Methode mit fetch_row usw. ist die Geschwindigkeit zwar klasse, aber die Faktoren werden nicht der richtigen Artikelnummer zugeordnet, weil nur rows ausgegeben werden, wo auch wirklich Daten drin sind...
Das ist mein momentanes Problem! :eek: (Hat das jemand verstanden?)

Aber naja, ich sitze hier gerade nicht an meinem Rechner und nun ist erstmal Wochenende!
Falls es dich interessiert und ich immer noch keinen Plan habe, dann hole ich den Thread am Montag nochmal hoch! ;)

Also schönes WE und danke! :)

Gruß Maxe
 
Zurück