gabrielb: Zahlen in MySql notieren und sortieren

Hallo
Ich bin kein guter Programmierer und mein Wissen zu MySql ist auch nicht besonders gut. Wahrscheinlich deshalb komme ich mit einem Zahlen-Problem nicht klar.
Ein Kunde möchte in seiner Datenbank Immobilien ablegen und das wichtigste Sortierkriterium soll der Preis sein. Obhen der höchste Preis, unten der niedrigste.
Ich habe das Feld in der Datenbank als VarChar angelegt und die Preise werden ganz einfach reingeschrieben. Ohne Punkt, ohne Komma. Ein Preis wie 3679500 lässt sich aber nicht so gut lesen wie 3.679.500. Wenn ich die Preise aber mit einem Punkt trenne, werden sie nicht korrekt sortiert. Ich weiß ehrlich nicht, welches Format das Feld haben soll: INT, DOuble oder sonstwas.

Für jeden kleinen hilfreichen Tipp wäre ich sehr dankbar.

mfg
Gabriel

  1. Hallo Gabriel,

    ich würde float nehmen (oder Double). Die kannst du dann ganz normal sortieren mit ORDER BY ... DESC

    Jetzt weiß ich nicht genau, mit welcher Sprache du die Daten abrufst, aber wenn du zum Beispiel PHP benutzt, gibt es Funktionen, die aus zB 22222.9293 => 2.222,93 macht.

    Das ist eigentlich das einfachste. Wenn du noch Hilfe brauchst, sag bescheid

    Hauke

  2. Hallo Gabriel,
    wie genau muss denn die Zahl sein? Sollte sie Zahlen mit Kommastellen zulassen? Dann würde wahrscheinlich ein Float oder Double in frage kommen. Wenn die Preise keine Fließkommazahlen enthalten reicht ein normales Integer. Weitere Infos zu den Datentypen bei MySQL findest du in der MySQL Dokumentation: http://dev.mysql.com/doc/refman/5.1/de/numeric-type-overview.html

    Viele Grüße,
    Ska4ever

  3. echo $begrüßung;

    Ich habe das Feld in der Datenbank als VarChar angelegt und die Preise werden ganz einfach reingeschrieben. Ohne Punkt, ohne Komma. Ein Preis wie 3679500 lässt sich aber nicht so gut lesen wie 3.679.500. Wenn ich die Preise aber mit einem Punkt trenne, werden sie nicht korrekt sortiert. Ich weiß ehrlich nicht, welches Format das Feld haben soll: INT, DOuble oder sonstwas.

    Integer und Fließkommaspalten sind für Preise weniger geeignet. Bei ersterem fehlt das Komma und damit können keine Cent-Beträge gespeichert werden. Das ist vielleicht bei Immobilien weniger wichtig, ...
    Aufgrund der Art und Weise, wie Fließkommazahlen üblicherweise gespeichert werden, kann es bei einigen Werten zu Ungenauigkeiten kommen. Im Dezimalsystem ergibt 1/3 eine unendlich lange Zahl 0,3333... Das gleiche Problem hat die Fließkommadarstellung, aber mit anderen Werten.
    Um Geldbeträge und andere Zahlen präzise zu speichern gibt es den Datentyp DECIMAL (oder NUMERIC)

    echo "$verabschiedung $name";

  4. Hallo
    Danke erstmal für die Antworten. So ganz am Ziel bin ich noch nicht, wahrscheinlich bin ich noch zu müde vom Wochenende.
    Die Preise wurden bisher so eingegeben:
    Für Mietpreise zum Beispiel: 245,00
    Für Kaufpreise zum Beispiel: 1.300.344,00
    Weil das Format ein Text war, war es auch kein Problem. Nur ist die Sortierung natürlich nicht ganz korrekt.

    Wenn ich in PhpMyAdmin nun den Zahlentyp auf "Double" umstelle und die Zahl 121.600 eingebe, kommt am Ende 121.6 raus.
    Stelle ich den Zahlentyp auf "Float", kommt auch diese beschnittene Zahl raus.
    Beim Typ "Decimal" kann ich auch nur Zahlen in der Form 120600 eingeben. Ich kann nicht 120.600 eingeben.

    Kann es sein, dass es mit MySql gar nicht möglich ist, Zahlen im Format 1.300.344,00 zu notieren? Muss ich sie als 1300344 abspeichern und erst hinterher mit PHP so formatieren, dass sie halbwegs ansehnlich werden?

    mfg

    1. echo $begrüßung;

      Kann es sein, dass es mit MySql gar nicht möglich ist, Zahlen im Format 1.300.344,00 zu notieren?

      Die übliche Notation von Zahlen in Computersprachen ist ohne Tausendertrennzeichen und mit Dezimalpunkt. Sind die Zahlen aufgrund lokaler Gegebenheiten anders formatiert, musst du sie erst in diese normalisierte Form bringen, wenn sie als Zahl behandelt werden sollen.

      Muss ich sie als 1300344 abspeichern und erst hinterher mit PHP so formatieren, dass sie halbwegs ansehnlich werden?

      Das wäre das gescheiteste, denn damit kann MySQL und PHP intern rechnen.

      echo "$verabschiedung $name";