DESC und ASC Problem

  • Hallo , ich hab ein Problem das ich nicht so ganz verstehe.

    Ich hab in einer Datenbank Zahlen gespeichert. Diese möchte ich nun sortiert von oben nach unten ausgeben lassen. Dabei nur die höchsten 5 Werte.
    Nun ist es komischerweise so das ich zuerst die zweistelligen Zahlen von oben nach unten ausgegeben bekomme und dann die dreistelligen danach ?
    Wie kann das sein das DESC zwischen zweistelligen und dreistelligen einen unterschied macht ?

    Hier mal mein Code ...

    die ausgabe sieht dann so aus ...

    user1 99
    user2 42
    user3 32
    user4 105
    user5 100

  • So, hier dann erst mal eine Gegenfrage. Welches Format hat die Spalte denn? Ist die ein String-Wert, also VarChar oder so was oder ist das ein nummerischer Wert, also Int, SmallInt etc ?

    Ich würde nun auch mal sagen, dass die Darstellung Zufall ist nun nichts mit 2 oder 3 Stellen zu tun hat.

    user1 99
    user2 42
    user3 32
    user4 105
    user5 100

    Man beachte die erste Ziffer. Also absteigend 9 bis 1. Die zweite Ziffer, auch absteigend. Und die dritte auch. Die zweistelligen sind hier davor, da "keine dritte Stelle" eben dennoch was anderes ist wie "0". Ich behaupte da mal, dass sich eine 555 zwischen 99 und 42 einsortieren würde.

    Und genau das schaut nicht nach einer Sortierung von Zahlen, sondern von Buchstaben aus.

    Davon ausgehend, dass ich richtig liege ohne es zu wissen....

    Du könntest mit LPAD() arbeiten, aber das ist salopp gesagt unfug. Wechsle den Spaltentyp auf einen nummerischen Wert, dann funktioniert das auch ;)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • vielen dank, ja du hast schon recht mit deiner vermutung :o)

    ich habs jetzt so zum laufen bekommen

    Code
    $abfrage = "SELECT user,assitest FROM assidaten ORDER BY ABS(assitest)DESC LIMIT 5 ";
  • Äm, ja und nein. Da gibt es schon mehrere Wege ans Ziel, der einzig sinnvolle ist aber halt den richtigen Datentyp zu verwenden. Wenn in der Spalte nur Zahlen stehen, dann nimm einfach einen nummerischen Datentyp für Ganzzahlen, dann passiert so was nicht und dieses ABS() brauchste auch nicht. Wenn es Kommazahlen sind, dann nimm double, decimal oder float.
    *** Link veraltet ***

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(