Hallo Ingrid,
Ein INNER JOIN sollte den PHP-Code drastisch reduzieren und die Performance deutlich verbessern.
Um es ein wenig zu demonstrieren:
sqla = "SELECT
kd_id, akt_art, akt_betrag, akt_bem, akt_bez
FROM aktion_bew
WHERE kd_id = '$kunde_id'
ORDER BY akt_art";
$upx = 0;
$rNachlass = 0;
$sqlb = "SELECT id, par_bez, par_wert1, par_wert2, par_wert3, par_wert4
FROM param
WHERE par_bez='Nachlass'
ORDER BY par_bez";
$result = mysql_query($sqla) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
if ( $row['akt_bez'] == 'Nachlass' ) {
//...
while($rowb = mysql_fetch_assoc($resultb)) {
// ...
if ($row['akt_art'] == $rowb['par_wert1'] ) {
// Mache was;
}
// kein else-Zweig
}
}
// kein else-Zweig
}
while ( $upx != 0 ) {
$resultup = mysql_query($queryup[$upx]) OR die(mysql_error());
$upx = $upx - 1;
; // Huch, ein leeres Statement :-)
}
Du fügst Deinem Array mit UPDATE-Statements nur dann einen neuen Eintrag hinzu, wenn
a) im Feld akt_bez der Wert 'Nachlass' steht
b) die Werte der Felder 'akt_art' in Tabelle aktion_bew und
'par_wert1' in Tabelle param gleich sind.
Alle anderen Datensätze interessieren Dich nicht.
Weiterhin greifst Du nur auf Inhalte der Spalten
a) par_wert1
b) par_wert4
zu, falls ich nichts übersehen habe. Die Inhalte der anderen Spalten müssten nicht angefordert werden.
Also verwende von vornherein das SQL-Statement
SELECT
p.par_wert1,
p.par_wert4
FROM aktion_bew a -- ein Aliasname erspart uns Schreibarbeit
INNER JOIN param p ON a.akt_art = p.par_wert1
WHERE a.kd_id = <die Kundenid aus der Variablen>
AND p.par_bez = 'Nachlass'
AND a.akt_bez = 'Nachlass'
ORDER BY a.akt_art, p.par_bez
Durchlaufe die Ergebnismenge und stelle Dein Array zusammen :-)
$upx = 0;
$rNachlass = 0; // Wo benutzt Du diese Variable?
$sql = <obiges Statement>
// Hmm, nicht gerade die schönste Fehlerbehandlung,
// das Skript einfach sterben zu lassen
$result = mysql_query($sqla) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
// Baue die Update-Statements zusammen
$upx=$upx+1;
// Hast Du hier die Probleme?
// Ich verstehe jedenfalls nicht, was Du hier vorhast
$querybetrag= "\$Feld" . $row['par_wert4'];
$querybem = "\$Bem" . $row['par_wert4'];
$queryart =$row['par_wert1'];
$queryup[$upx]= "UPDATE aktion_bew
SET akt_betrag = '$querybetrag',
akt_bem = '$querybem'
WHERE akt_art = '$queryart'
AND kd_id = '$kunde_id' ;";
// Anmerkung: Warum das Semikolon am Ende des Statements
}
// Führe die Update-Statements aus
// Hast Du schon einmal von [link:http://de2.php.net/manual/de/control-structures.foreach.php@title=foreach] gehört
// - hier in Kombination mit [link:http://de2.php.net/manual/de/function.array-reverse.php@title=array_reverse()]?
while ( $upx != 0 ) {
$resultup = mysql_query($queryup[$upx]) OR die(mysql_error());
$upx = $upx - 1;
}
Wie bereits gesagt, ist mir völlig schleierhaft, wie Deine UPDATE-Statements aussehen sollten - und wo Dein ursprüngliches Problem genau beheimatet ist. Nähere Informationen mit ein paar Beispieldaten wären sicherlich nützlich.
Freundliche Grüße
Vinzenz