Seite 1 von 1
DB: Spalte mit Kommastellen summieren ?
Verfasst: 09.02.2006 17:53
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:
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
Verfasst: 09.02.2006 19:09
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.
Verfasst: 09.02.2006 21:43
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
Verfasst: 09.02.2006 22:56
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
Verfasst: 10.02.2006 10:53
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
Verfasst: 10.02.2006 14:31
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)
}
Verfasst: 13.02.2006 10:11
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
Verfasst: 13.02.2006 20:06
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