DB - Spalten in einer bestimmten Art addieren ?!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

DB - Spalten in einer bestimmten Art addieren ?!

Beitrag 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
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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++;

}
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag 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
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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()).
KB:knigge
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

  1. Select * is evil
  2. tabelle_5 und tabelle_9 sind sehr aussagekräftige Namen
  3. Bei der Einrückung ist der Code nur schwer leserlich
  4. $row[nummer] <- da fehlen die '
  5. Wieso entfernst du alle . und , ? Wenn du damit z.B. 10.5 und 5 zusammenrechnest, kommt als Ergebnis nicht 15.5 sondern 110 raus :roll:
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...
KB:knigge
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,

ich habe jetzt die Zeile

Code: Alles auswählen

$i++;
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
Antworten

Zurück zu „Coding & Technik“