DB: Spalte mit Kommastellen summieren ?

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: Spalte mit Kommastellen summieren ?

Beitrag von Condor »

Hallo,

ich habe wiedermal ein kleines Problem.
Ich habe in meiner DB eine Spalte, in der Preise stehen.
Diese Preise sind mit einem Komma versehen.
Bis jetzt habe ich das immer mit str_replace() getan um zwischen Punkt und Komma zu agieren.
Mein Problem ist jetzt, das ich die komplette Spalte addieren möchte.
Dies mache ich mit:

Code: Alles auswählen

$sql = "SELECT SUM(verkpr) FROM $tabelle_7";
Da es sich aber um Kommastellen mit einem Komma handelt, schmeisst er diese weg, was auch normal ist.
Meine Frage ist, kann ich irgendwo bevor er summiert die Funktion str_replace einbinden bzw. in den SQL-Befehl integrieren ?

Hoffe das ihr mir wieder mal helfen könnt.

Mfg
Condor
Tellerrand
Mitglied
Beiträge: 17
Registriert: 08.02.2006 11:21

Beitrag von Tellerrand »

Habe keine direkte Lösung für das Problem,
aber meiner Meinung nach speichert man Preise als int.
Die zwei Nachkommastellen simuliert man dann durch einfaches teilen.

Also eher ein alternativer Vorschlag, speichern als Integer und bei der Ausgabe immer durch 100 teilen und fertig.
Magic_Mike
Mitglied
Beiträge: 2
Registriert: 09.02.2006 21:28

Beitrag von Magic_Mike »

Ich hätte eine Vermutung, habe das aber noch nicht ausprobiert.

Wenn du die ganze Spalte ausliest und den jeweiligen Wert in eine Variable schreibst und dabei das Komma durch einen Punkt ersetzt und dann die Variable zu einer anderen Variable addierst, dann könnte es funktionieren.

Select verkaufspreis from tabelle_7
$variable1 = row--)verkaufspreis (mit strreplace komma durch Punkt ersetzen)
Dann $variable1 in $variable2 addieren

Zum Schluss sollte in Variable2 dann die Summe stehen
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,

danke für die Antworten.

1. Ich hätte es schon von vornerein als Dezimalzahl etc. abgespeichert.
Aber der jenige, der das Script bzw. die DB dann nutzen möchte, besteht darauf, das die Zahlen nicht mit Punkt sonder mit Komma in der DB stehen.

2. Das Problem ist, das ich nie weiss wieviele Datensätze in der DB stehen werden. Mal sind es 2, mal 7 ...
Somit war der Befehl SUM(verkpr) sehr praktisch.

Sonst keiner eine Idee ?

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

Beitrag von Condor »

Hallo,

ich habe jetzt versucht die Datensätze erst auszulesen, dann zu formatieren und zum Schluss zu summieren.
Jedoch summiert er nicht richtig, da er beim letzten Datensatz stehen bleibt.
Hier mein Code:

Code: Alles auswählen

$sql = "SELECT verkpr FROM $tabelle_7";
$result = mysql_query($sql, $conn);
if($result)
  {
    while($row = mysql_fetch_array($result))
    {
$ver_preis=$row[verkpr];
$format_ver_preis = str_replace(",", ".", $ver_preis);
    }
  }


$sql2 = "SELECT SUM($format_ver_preis) FROM $tabelle_7";
$result2 = mysql_query($sql2, $conn);
list($gesamtsumme)=mysql_fetch_array($result2);
Kann mir da jemand helfen ?
Sehe ich da was nicht ?

Mfg
Condor
Tellerrand
Mitglied
Beiträge: 17
Registriert: 08.02.2006 11:21

Beitrag von Tellerrand »

Condor hat geschrieben: 1. Ich hätte es schon von vornerein als Dezimalzahl etc. abgespeichert.
Aber der jenige, der das Script bzw. die DB dann nutzen möchte, besteht darauf, das die Zahlen nicht mit Punkt sonder mit Komma in der DB stehen.
Da hast du etwas falsch verstanden.
Der Vorschlag war der in der Db nur Integers zu speichern, also komplett ohne Punkt oder Komma.
Bei der Ein/Ausgabe kann man den Punkt oder das Komma dann ja frei reinsetzen.
Nur in der Datenbank selber sind mMn Integer Werte eher angebracht, aber nungut, wenn in der Db Kommastellen stehen sollen:

So in etwa würde ich da dann vorgehen.

Code: Alles auswählen

$sql = "SELECT verkpr FROM $tabelle_7";
$result = mysql_query($sql, $conn);
$summe = 0;
if($result) {
    while($row = mysql_fetch_array($result)) { // pro preis 
      $ver_preis=$row['verkpr']; // Preis einlesen
      $format_ver_preis = str_replace(",", "", $ver_preis); // Komma entfernen
      $summe += $format_ver_preis; // preis auf die summe addieren
    }
   $summe /= 100; // den Punkt wieder setzen
   $summe = str_replace(".", ",", $summe); // Punkt durch Komma ersetzen (wenn es so gewollt ist)
  }
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,

danke Tellerrand.
Habe es gerade ausprobiert.
Funktioniert ohne Probleme, nochmals danke.
Eins könntest du mir noch erkären:

Code: Alles auswählen

      $summe += $format_ver_preis; // preis auf die summe addieren
    }
   $summe /= 100; // den Punkt wieder setzen
Zeile 1: Dort werden soviele Durchgänge gemacht, wie Datensätze vorhanden sind und immerwieder zum Alten Ergebniss addiert?

Zeile 3: Dort wird die Summe durch 100 geteilt und automatisch ein Kommata gesetzt?

Mir gehts eigentlich um die Schreibweise.

Nochmals herzlichen Dank.

Mfg
Condor
Tellerrand
Mitglied
Beiträge: 17
Registriert: 08.02.2006 11:21

Beitrag von Tellerrand »

Ja, genau das wird dort gemacht.

Die Schreibweise ist nur ne Abkürzung:
$x += $y entspricht $x = $x + $y
$x /= $y entspricht $x = $x / $y
Antworten

Zurück zu „Coding & Technik“