Hallo allerseits,
nachdem mir das letzte Mal bei einem ähnlichen Thema so großartig geholfen wurde, kann mir bei meinem neuen Problem bestimmt auch jemand helfen:
Es geht immer noch um das selbe Projekt, die Auswertung der Inventuren von über 100 Filialen über 4 Jahre.
Ich habe jetzt noch zwei Tabellen. Einmal die Inventuren und einmal die Umsätze. (Die Umsätze benötige ich, um eine Quote zu errechnen damit die Filialen verglichen werden können.)
Momentan lasse ich die DB mit PHP 4 (4 Jahre) * x-mal (so oft wie es Filialen gibt) durchsuchen, was natürlich extrem zeitaufwändig ist.
Vorher werden schon mal die Mittelwerte berechnet, um eine Ampel darstellen zu können die zeigt ob die Filiale besser oder schlechter als der Durchschnitt ist.
Ich habe momentan nur 20 Filialen in der DB und die Abfrage dauert schon 20 Sekunden!
Lässt sich das auch DB-seitig lösen? Meine Lösung erscheint mir selbst sehr kompliziert, aber meine Kenntnisse reichen (noch) nicht aus eine bessere zu finden.
Mein Script sieht momentan so aus:
Vielen Dank schon mal
HiddenX
nachdem mir das letzte Mal bei einem ähnlichen Thema so großartig geholfen wurde, kann mir bei meinem neuen Problem bestimmt auch jemand helfen:
Es geht immer noch um das selbe Projekt, die Auswertung der Inventuren von über 100 Filialen über 4 Jahre.
Ich habe jetzt noch zwei Tabellen. Einmal die Inventuren und einmal die Umsätze. (Die Umsätze benötige ich, um eine Quote zu errechnen damit die Filialen verglichen werden können.)
Momentan lasse ich die DB mit PHP 4 (4 Jahre) * x-mal (so oft wie es Filialen gibt) durchsuchen, was natürlich extrem zeitaufwändig ist.
Vorher werden schon mal die Mittelwerte berechnet, um eine Ampel darstellen zu können die zeigt ob die Filiale besser oder schlechter als der Durchschnitt ist.
Ich habe momentan nur 20 Filialen in der DB und die Abfrage dauert schon 20 Sekunden!
Lässt sich das auch DB-seitig lösen? Meine Lösung erscheint mir selbst sehr kompliziert, aber meine Kenntnisse reichen (noch) nicht aus eine bessere zu finden.
Mein Script sieht momentan so aus:
PHP-Code:
// Abfragen um vorab schon die Mittelwerte zu berechnen
$jahr = 2007;
$jahr_end = 2010;
for ($jahr; $jahr <= $jahr_end; $jahr++) {
// Gesamt-Summe der Differenzen in Wert pro Jahr ermitteln
$sql = 'SELECT SUM(`BewPreis3`) AS SUMME FROM inventuren
WHERE jahr='.$jahr.'';
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$wert_diff[$jahr] = round($row['SUMME'],2);
// Gesamt-Umsatz pro Jahr ermitteln
$sql = 'SELECT SUM(`umsatz`) AS umsatz FROM umsatz
WHERE jahr='.$jahr.'';
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$umsatz[$jahr] = $row['umsatz']/1000;
$quoteschnitt[$jahr] = round((abs($wert_diff[$jahr])/$umsatz[$jahr]),2);
}
// Abfrage1: Über alle Filialen aus Tabelle FILIALEN (beinhaltet Nr und Filiale)
$sql_abf1 = 'SELECT nr,filiale FROM FILIALE';
$result_abf1 = mysql_query($sql_abf1) OR die(mysql_error());
while($row_abf1 = mysql_fetch_assoc($result_abf1)) {
$nr = $row_abf1['nr'];
$filiale = $row_abf1['filiale'];
// Schleife für Abfragen zwischen 2007 und 2010
$jahr = 2007; // Anfangsjahr der Schleife
$jahr_end = 2010; // Ende der Schleife
$quotemax = 0; // Startwert: Höchste Quote der jeweiligen Filiale
// Geht alle Jahre durch
for ($jahr; $jahr <= $jahr_end; $jahr++) {
// Summe der Differenzen in Stück und Wert
$sql = 'SELECT SUM(`BewPreis3`) AS SUMME1,
SUM(`Menge-Diff`) AS SUMME2 FROM inventuren
WHERE nr = "'.$nr.'"
AND jahr='.$jahr.'';
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$wert_diff[$jahr] = round($row['SUMME1'],0);
$menge_diff[$jahr] = $row['SUMME2'];
...
// Umsatz
$sql = 'SELECT jahr,nr,umsatz FROM umsatz
WHERE nr= "'.$nr.'"
AND jahr='.$jahr.'';
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$umsatz[$jahr] = $row['umsatz'];
...
HiddenX
Kommentar