Antwort
 
Themen-Optionen Thema durchsuchen
Alt 12.01.2008, 15:54 Nach oben    #1
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard Wert vom Typ decimal in 2 Teile aufspalten

Ich habe in der Datenbank den Typ decimal(5,2) benutzt.
Für die folgende Verarbeitung in PHP wäre es schön, wenn ich die Zahl in den Teil vor und nach dem Komma aufsplitten kann.

Natürlich geht das in PHP - das ist kein Problem; ich würde das gerne direkt bei der db-Abfrage machen.

Ich denke mal, dass das geht, aber ich wüsste jetzt nicht wie...

Hat jmd. eine Idee?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2008, 17:35 Nach oben    #2
Neuer Benutzer
 
Registriert seit: 05.01.2008
Beiträge: 1
Standard

Ich gehe mal vom MySQL aus:

SELECT <spalte>, truncate(<spalte>,0),abs((<spalte>-truncate(<spalte>,0))*100)
FROM <tabelle>
WHERE 1

Bitte ersetze <spalte> und <tabelle> mit Deinen Werten.
Georg V. ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2008, 17:37 Nach oben    #3
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Hi Jann Hendrik.

Für die Ganzzahl nimmst du einfach FLOOR und für den Rest eben den Wert - den Ganzzahl-Wert oder vielleicht geht auch Modulo 1?

Also irgendwie so:
Code:
SELECT
    FLOOR(`zahl`) + (`zahl` < 0) AS ganzzahl,
    CAST((`zahl` % 1) * 100 AS UNSIGNED)  AS rest
Wenn `zahl` „UNSIGNED“ ist, dann musst du bei negativen Werten natürlich noch 1 addieren.

Bast

PS:
Da war wohl einer schneller. Willkommen Georg. TRUNCATE() ist schöner, ja. Und, die Funktion hätte wohl auch eher etwa so aussehen müssen:

Code:
    FLOOR(`zahl`) + (`zahl` < 0 AND `zahl` != FLOOR(`zahl`))

Geändert von Basti (12.01.2008 um 18:01 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2008, 18:09 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

Ich habe mich für basis Version entschieden.

Auf floor() hätte ich auch selbst kommen können...


Danke!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.01.2008, 18:27 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

TRUNCATE() ist doch wirklich besser geeignet. Lediglich, wenn die Zahlen alle positiv ist, ist es Wurscht, da du dir da dieses +1 sparen kannst. Aber auch dann würde ich auf TRUNCATE setzen, andererseits aber bei Modulo bleiben:

Code:
SELECT
    TRUNCATE(`zahl`, 0) AS `ganzzahl`,
    (`zahl` % 1) * 100 AS `rest`
Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.01.2008, 22:48 Nach oben    #6
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Hier der Hinweis, dass man sowas nicht ein Datenbank-System machen lassen sollte. Alle Form von mathematischen oder sontigen Verwurschtelungen sind sogar in PHP in aller Regel besser aufgehoben. Das sollte man beachten, wenn man zum Beispiel viele Datensätze verarbeitet oder einem der Hoster sagt "Was treibst du denn da?".

Und wenn man das nicht weiterverarbeitet, sondern beispielsweise in eine HTML-Tabelle direkt verarbeitet, sind sogar die String-Funktionen (replace "." mit "</td><td>" oder sowas) auch ziemlich gut zu verwenden.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.01.2008, 09:18 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

Zitat:
Zitat von mepeisen Beitrag anzeigen
Hier der Hinweis, dass man sowas nicht ein Datenbank-System machen lassen sollte.
Magst du diese Aussage näher begründen?

Ich bin bisher davon ausgegangen, dass der db-Server das ein wenig schneller hinbekommt als ein nachgeschaltetes PHP-Skript.

Wobei das bei meinen 70 Datensätzen, um die es hier konkret geht recht egal sein dürfte...
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.01.2008, 09:48 Nach oben    #8
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Das kommt stark auf das DB-System an und auf das System, das hinten dran ist. Wenn man einige wenige Datensätze hat, die verrechnet werden sollen, kann das das DB-System sehr fix.
Nehmen wir das Beispiel, dass die Treffermenge aufgrund einer Rechenoperation eingeschränkt werden soll, also ein Ergebnis nur dann zurückgegeben werden soll, wenn "a+b>c" ist. Sowas das DB-System machen lassen zu wollen, ist kontraproduktiv, da das immer die Verwendung von Indices u.ä. aushebelt. Wenn man aber beispielsweise geschickt sortiert und dann einen Treiber bzw. Funktionen nutzt, die immer nur einen Teil der Ergebnisse laden und dann abbrechen, sobald die Bedingung nicht mehr erfüllt ist (was das PHP-Script herausfinden würde), kommt man in aller Regel schneller zum Ziel.

Wie du sagst: Bei deinen 70 Datensätzen dürfte das eher egal sein. Aber solche komplexe Rechenperationen (und aus DB-Sicht ist das komplex) oder irgendwelche String- oder Regex-Operationen sollte man einfach vermeiden.

Es gibt einen zweiten Aspekt, der besonders wichtig werden kann. Sobald man eine Verbindung hat und gleichzeitig Updates durchführt, erzeugt jedes DB-System eine Art Lock, um konkurrierende Zugriffe zu vermeiden. Wenn man nun aufwendige Selects baut, kann das DB-System nie optimal arbeiten, da gleichzeitig Daten zum Lesen und Schreiben gesperrt werden über einen vergleichsweise langen Zeitraum.

Der dritte grund ist die Systemarchitektur. Gerade auch Hoster trennen oft Webserver physisch von der Datenbank. Dann ist es nicht mehr ganz so egal, wo die Last erzeugt wird. Ein Script kann in einer Millisekunden fertig sein. Wenn es aber permanent 250 Millisekunden auf der Datenbank rumrödelt, wird der Hoster irgendwann bei vielen Besuchern intervenieren.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.01.2008, 09:57 Nach oben    #9
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

Danke dir für die Erläuterung!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Modifier haben einen Wert, obwohl keine gedrückt sind materthron Desktop-Applikationen und Grafik 3 06.11.2005 16:28


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45