SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 12.03.2009, 20:09:18
lexiphp lexiphp ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 44
Beiträge: 6
Summe bilden

Guten Abend,

ich habe ein Problem bei der Summierung von Daten aus einer PHPMyAdmin DB. Trotz Internetrecherche habe ich bisher keine Lösung gefunden.

Problembeschreibung:
Ich importiere über ein PHP-Script eine etwa 1,4 GB große CSV-Datei in eine PHPMyAdmin DB.
U.a. wird eine Spalte mit Zahlenwerten importiert, z.B.

Spalte_Zahlenwerte
10.300 (zehntausenddreihundert)
11.400 (elftausendvierhundert)
9.400 (neuntausendvierhundert)
usw.....

Nach dem Import mache ich ein SELECT auf die Zahlenwerte, um eine Summe zu bilden. "SELECT sum(Spalte_Zahlenwerte)...." Das Ergebnis ist nicht korrekt, da die Zahlenwerte nach dem Punkt abgeschnitten werden. Wie kann ich das verhindern?

Ich habe z.B. versucht mit einem PHP-Script die importierten Werte der Spalte "Spalte_Zahlenwerte" vom Punkt zu befreien. Wäre eine Lösung, dauert nur bei der riesen Datenbank viel zu lange.

Eine Alternative wäre das Feld "Spalte_Zahlenwerte" direkt beim Import mit "Load data infile..." zu bearbeiten (Punkt löschen). Das würde ruckzuck gehen, nur hab ich das noch nicht hinbekommen.

Vielleicht geht es aber auch viel einfacher!?

Hat jemand eine Idee? Weiß einfach nicht weiter...
Mit Zitat antworten
  #2  
Alt 13.03.2009, 00:34:58
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Summe bilden

Als was sind den deine Zahlenwerte in der Tabelle erstellt worden?
Zitat:
Der Datentyp DECIMAL ist ein Festkommatyp und Berechnungen mit diesem Typ sind genau. In MySQL hat DECIMAL mehrere Synonyme: NUMERIC, DEC, FIXED. Auch die Integer-Typen sind genaue Datentypen.

Die Datentypen FLOAT und DOUBLE sind Fließkommatypen und Berechnungen mit diesen Typen sind Näherungen. In MySQL haben FLOAT und DOUBLE die Synonyme DOUBLE PRECISION und REAL.
Und so würde es genauer werden.
Zitat:
Die Deklarationssyntax für eine DECIMAL-Spalte lautet DECIMAL(M,D). Die Argumente haben in MySQL 5.1 folgende Wertebereiche:

*

M ist die Höchstzahl der Stellen (die Genauigkeit) und liegt zwischen 1 und 65. (Ältere Versionen von MySQL hatten hier einen zulässigen Wertebereich von 1 bis 254.)
*

D ist die Anzahl der Stellen rechts vom Dezimalpunkt (die Dezimalstellen) mit dem Wertebereich 0 bis 30. D darf nicht größer als M sein.

Dass M maximal 65 beträgt, führt dazu, dass Berechnungen mit DECIMAL-Werten auf bis zu 65 Stellen genau sind. Da diese maximale Genauigkeit von 65 Stellen auch für genaue numerische Literale gilt, hat sich der maximale Wertebereich solcher Literale geändert. (In älteren MySQL-Versionen konnten Dezimalwerte bis zu 254 Stellen haben, aber die Berechnungen wurden als Fließkommaoperationen ausgeführt und waren daher Näherungen und nicht genau.)
Mit Zitat antworten
  #3  
Alt 13.03.2009, 10:50:20
Veturi Veturi ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 60
Beiträge: 3
AW: Summe bilden

Hmmm.... sollte es ein String sein, könnte man vielleicht folgendes probieren:
SELECT sum( REPLACE(Spalte_Zahlenwerte, '.', ''))
denn:
SELECT REPLACE('1.2345', '.', '' )
ergibt:
12345
Gruß
Ralf
Mit Zitat antworten
  #4  
Alt 13.03.2009, 13:34:09
lexiphp lexiphp ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 44
Beiträge: 6
AW: Summe bilden

Danke für eure schnellen Antworten...leider schaff ichs nicht so schnell :0/

Zitat:
Also was sind den deine Zahlenwerte in der Tabelle erstellt worden?
- Mit INT und DEZIMAL hat es nicht geklappt, INT schneidet alles hinter dem Punkt ab, DEZIMAL 10, 3 macht mir aus 500 fünfhunderttausend (500.000)
- hier will ich versuchen noch ein bisschen mit den Datentypen auszuprobieren

Der Vorschlag von Ralf funktioniert:
- SELECT sumREPLACE('12.123', '.', '' ) ergibt 12123
- Die Summe würde also stimmen, wenn ich die Daten korrekt importieren könnte (also 500 bleibt 500 und 12.123 bleibt 12.123
Mit Zitat antworten
  #5  
Alt 13.03.2009, 14:44:30
lexiphp lexiphp ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 44
Beiträge: 6
AW: Summe bilden

Hallo,

bin nun zu folgender Lösung gekommen:

1. Die Zahlenwerte mit Tausendertrennzeichen werden in einem Varcharfeld gespeichert
2. Mit SELECT sum(zahlenwert, '.' ,'') wird der Tausenderpunkt entfernt und alle Zahlenwerte korrekt summiert
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Summe aus zwei Tabellen bilden Ghost66 PHP für Fortgeschrittene und Experten 3 15.09.2008 15:56:53
Berechnen der Summe maximalen Werten gruppiert Elvis_Presley MySQLi/PDO/(MySQL) 1 20.05.2008 16:50:55
Summe errechnen Heinrich PHP Grundlagen 3 12.06.2006 08:09:14
Summe, Sortieren, 2 Tabellen verknüpfen Giz MySQLi/PDO/(MySQL) 4 27.05.2006 14:56:23
Summe aus Bestellmenge x Preis (aus 2 Tbl) für mehrere Zeilen.. HELP !?! panametrics PHP für Fortgeschrittene und Experten 4 19.03.2006 18:12:07


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:08:41 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt