Seite 1 von 1
DB - Spalten in einer bestimmten Art addieren ?!
Verfasst: 17.01.2007 17:51
von Condor
Hallo Leute,
ich habe mal wieder ein Problemchen.
In einer DB haben wir z.B. die Spalte Typ und Umsatz.
In diesen Spalten stehen z.B. Datensätze wie:
Code: Alles auswählen
1 - Plastik - 123
2 - Plastik - 23
3 - Metall - 112
...
Die Umsätze etc. lese ich in dieser Schleife aus:
Code: Alles auswählen
if($result_2)
{
while($row = mysql_fetch_array($result_2))
{
$umsatz = $row['umsatz'];
$format_umsatz = str_replace(",", "", $umsatz);
$format_umsatz = str_replace(".", "", $format_umsatz);
$summe_monats_umsatz += $format_umsatz;
}
$summe_monats_umsatz_format_1 = $summe_monats_umsatz / 100;
$summe_monats_umsatz_format_2 = number_format($summe_monats_umsatz_format_1, 2, ',', '.');
}
Das Problem ist jetzt, beim ersten Durchgang summiert er den Umsatz geht in den zweiten Durchgang behält aber den Umsatz aus dem ersten Durchgang und addiert ihn zu dem aktuellen Durchgang usw.
So kommen natürlich falsche Umsätze zustande, da sie dauernd addiert werden.
Im obigen Beispiel hätte also der Typ "Metall" nicht einen Umsatz von 112 Euro sondern 258 Euro, was ja falsch ist.
Ich hoffe ihr habt verstanden wie ich das meine.
Wie könnte ich das am besten lösen bzw. was ist am effektivsten ?
Variable Variablen würde ich nicht so gerne nehmen.
Mfg
Condor
Verfasst: 17.01.2007 18:05
von fanrpg
Wie wärs dann mit Arrays?
Code: Alles auswählen
$i = 0;
$summe_monats_umsatz = array();
while($row = mysql_fetch_array($result_2))
{
$umsatz = $row['umsatz'];
$format_umsatz = str_replace(",", "", $umsatz);
$format_umsatz = str_replace(".", "", $format_umsatz);
$summe_monats_umsatz[$i] = $format_umsatz;
$i++;
}
Verfasst: 17.01.2007 18:46
von Condor
Hallo,
hmmm ... was soll ich dazu sagen.
So hab ich das auch probiert, zwar andere Variable aber das hat damit ja nix zutun und es tat nicht das was ich wollte.
Scheinbar habe ich da irgendwo einen Fehler eingebaut.
Ich danke dir trotzdem herzlichst.
Ah ... Jetzt sehe ich es.
Ich habe die diese Zeilte nicht: $summe_monats_umsatz = array();
Da hatte ich ja ein schönes Array

Dummer Fehler.
Damit müsste der Fehler schon eigentlich bereinigt sein, testen kann ich es aber erst morgen, heute raucht der Kopf schon zuviel
Dankeschön an dich !
Mfg
Condor
Verfasst: 17.01.2007 19:07
von Olli Oberhausen
Mal ein anderer ansatz:
Code: Alles auswählen
SELECT FORMAT(SUM(umsatz),2) FROM deiner_tabelle WHERE bedingung = irgendwas;
Heraus kommt ein fertiger und formatierter Gesamtbetrag in der Amerikanischen form: 123,000.50
Diesen brauchst du nur noch mit number_format ins deutsche format konvertieren.
Olli
Verfasst: 17.01.2007 19:36
von Pyramide
http://www.sql-und-xml.de/sql-tutorial/ ... daten.html da das zweite Beispiel ist was du suchst (in deinem Fall SUM() statt COUNT()).
Verfasst: 18.01.2007 11:03
von Condor
Hallo,
Wie gebe ich aber nun die Umsätze aus, wenn ich meinen Code beibehalten möchte ?
Ich muss dazu noch sagen, wenn z.B. in der DB noch ein Typ mit Umsatz = 0 ist, soll dieser natürlich auch ausgegeben werden, nur halt mit Umsatz 0.
Dies wäre jetzt so mein Test-Code:
Code: Alles auswählen
$sql_2 = "SELECT * FROM $tabelle_9";
$result_2 = mysql_query($sql_2, $conn);
if($result_2)
{
while($row = mysql_fetch_array($result_2))
{
$nummer = $row[nummer];
$warengruppe = $row[gegenstand];
$sql_3 = "SELECT * FROM $tabelle_5 WHERE ver_dat LIKE '%$datum' AND wgnr='$nummer'";
$result_3 = mysql_query($sql_3, $conn);
$anzahl = mysql_num_rows($result_3);
if($result_3)
{
$i = 0;
$summe_monats_umsatz = array();
while($row = mysql_fetch_array($result_3))
{
$umsatz = $row['umsatz'];
$format_umsatz = str_replace(",", "", $umsatz);
$format_umsatz = str_replace(".", "", $format_umsatz);
$summe_monats_umsatz[$i] += $format_umsatz;
$i++;
}
//$summe_monats_umsatz_format_1 = $summe_monats_umsatz / 100;
//$summe_monats_umsatz_format_2 = number_format($summe_monats_umsatz_format_1, 2, ',', '.');
}
echo $nummer." - ".$warengruppe." - ".$anzahl." - ".$summe_monats_umsatz[$i]."<br>";
}
}
Mir gehts jetzt nur darum, das alle Typen aus der DB untereinander stehen inkl. ihrer Umsätze.
Der obige Code ist in dieser Form natürlich nicht richtig, soll euch aber nur zeigen was ich meine.
Könnt ihr mir da noch ein bisschen nachhelfen ?
Mfg
Condor
Verfasst: 18.01.2007 17:30
von Pyramide
- Select * is evil
- tabelle_5 und tabelle_9 sind sehr aussagekräftige Namen
- Bei der Einrückung ist der Code nur schwer leserlich
- $row[nummer] <- da fehlen die '
- Wieso entfernst du alle . und , ? Wenn du damit z.B. 10.5 und 5 zusammenrechnest, kommt als Ergebnis nicht 15.5 sondern 110 raus

Condor hat geschrieben:Mir gehts jetzt nur darum, das alle Typen aus der DB untereinander stehen inkl. ihrer Umsätze.
Das macht der Code, den ich oben verlinkt habe. Ansonsten bitte mal deine Tabellenstruktur posten...
Verfasst: 18.01.2007 19:31
von Condor
Hi,
1. Schaue ich mir morgen mal an.
2. Die werden halt in der settings.php angegeben.
3. Sorry.
4. Jup.
5. Das war ein schnell zusammengestrickter Code in der Mittagspause. Die erste Zeile ist eigentlich die richtige.
In der DB stehen die Zahlen im Format: 123,45.
6. Tabellenstruktur ist noch nicht da, geht erstmal nur um eine "einfache" Ausgabe.
7. Mein Problem ist halt, das er mit dem geposteten Code nicht den Zusammengerechneten Wert ausgibt, er zählt die nicht zusammen.
Was ist an meinem zu letzt geposteten Code falsch.
Eine Erläuterung wäre sehr nett.
Bis dann.
Mfg
Condor
Verfasst: 18.01.2007 21:17
von Pyramide
Condor hat geschrieben:Was ist an meinem zu letzt geposteten Code falsch.
Steht in meinem letzten Beitrag. Aufgrund der fehlenden Tabellenstruktur und mangelhafter Formatierung kann ich leider nicht sagen, ob du nur die oben beschriebenen Fehler gemacht hast oder ob der Code totaler bloat ist.
Verfasst: 19.01.2007 13:36
von Condor
Hallo,
ich habe jetzt die Zeile
ausgeklammert und nun funktioniert es.
Jetzt habe ich aber einen Logikfehler.
Warum funktioniert es jetzt, wenn ich $i nicht erhöhe ?
Müsste das Script jetzt nicht den Umsatz immer vom vorherigen Durchgang mitnehmen und zum Umsatz des nächsten Durchgangs addieren ?
So würden ja falsche Umsätze zu stande kommen!
Wäre nett wenn das jemand erläutern könnte, da ich jetzt auf dem Schlauch stehe
Mfg
Condor