Achot: ORDER by

Hallo,

irgendwas stimmt da nicht, ich habe folgende Bezeichnungen in der Datenbank:

  1. Der Tag
  2. Echt was
  3. DAS!
  4. 45min
  5. Bingo

Jetzt möchte ich nach ASC sortieren und erhalte folgende Ausgabe

  1. 45min
  2. Bingo
  3. DAS!
  4. Der Tag
  5. Echt was

Was stimmt da denn nicht? Auch wenn ich mit phpMyAdmin die Spalte sortieren lasse, erhalte ich diese Sortierung. Kann also nicht am Script liegen. Wie kommt diese Sortierung zustande?

Das Feld titel, welches sortiert werden soll hat den Feldtype varchar(200)

  1. Hallo,

    sieht für mich ok aus, was hättest du erwartet?

    Gruß
    Kalk

    1. Hallo,

      sieht für mich ok aus, was hättest du erwartet?

      EDIT: Sorry, ich bin schon total neben der Kappe :/ Ich meinte, dass die Zahl nach unten kommt.

  2. Tach!

    irgendwas stimmt da nicht,

    Und was stimmt da nicht?

    Jetzt möchte ich nach ASC sortieren und erhalte folgende Ausgabe

    1. 45min
    2. Bingo
    3. DAS!
    4. Der Tag
    5. Echt was

    Was stimmt da denn nicht?

    Ich weiß ja nicht, was das Ergebnis sein soll. Sieht normal aus.

    Wie kommt diese Sortierung zustande?

    Für Sortierung und Vergleichen ist die Collation-Angabe zuständig. Die bestimmt, wann Buchstaben gleich oder größer oder kleiner sind.

    dedlfix.

    1. Hallo,

      1. 45min
      2. Bingo
      3. DAS!
      4. Der Tag
      5. Echt was

      Was stimmt da denn nicht?

      kann ich nicht nach dem Alphabet A,B,C usw. sortieren lassen? Das Bingo müsste nach dem A kommen.

      1. Tach!

        1. 45min
        2. Bingo
        3. DAS!
        4. Der Tag
        5. Echt was

        Was stimmt da denn nicht?

        kann ich nicht nach dem Alphabet A,B,C usw. sortieren lassen?

        Doch, du kannst nach den diversen Collation-Regeln sortieren lassen.

        Das Bingo müsste nach dem A kommen.

        Welches A?

        dedlfix.

        1. Hallo,

          Welches A?

          Sorry, ich meinte die Zahl sollte ganz nach unten.

          1. Tach!

            Sorry, ich meinte die Zahl sollte ganz nach unten.

            Dafür kenne ich keine Collation. Abseits von Buchstaben wird üblicherweise nach ASCII sortiert, und da kommen Ziffern vor Buchstaben.

            Wenn du Zahlen hinten stehen haben möchtest, wirst du wohl selbst Hand an die Sortierung anlegen. Zum Beispiel herausfinden, ob der Wert mit Ziffern anfängt und dann eine 0 ansonsten eine 1 liefern und den eigentlichen Textfeld-Inhalt an zweiter Stelle sortieren.

            dedlfix.

            1. Hallo Dedlfix,

              gibt es bei MySQL eigentlich eine Möglichkeit, eigene Kollationen anzulegen?

              Ich kenne das von anderen DNMS. Da ist das möglich.

              Liebe Grüße
              TS

              --
              es wachse der Freifunk
              http://freifunk-oberharz.de
              1. Unkonventioneller Ansatz: gibt es eine EBCDIC Collation? Da kommen die Zahlen hinter den Buchstaben.

                Allerdings steckst du dann bis zum Hals in der IBM Großrechnerwelt...

                1. Tach!

                  Unkonventioneller Ansatz: gibt es eine EBCDIC Collation? Da kommen die Zahlen hinter den Buchstaben.

                  Die Regeln der Kollationen richten sich vorwiegend nach natürlichen Sprachen/Schriftsystemen.

                  dedlfix.

  3. nicht schön aber selten

    select
      entry,
      (entry REGEXP '^[0-9]*$') as isint
    from alphanum
    order by isint, entry
    
    1. Tach!

      (entry REGEXP '[1]*$') as isint

      Der Ausdruck findet aber nicht das 45min.

      dedlfix.


      1. 0-9 ↩︎

      1. Haste Recht, ist nur ein Ansatz. Muss man halt noch anpassen, wirkt z.B. auch nicht bei "1a2b3c4d". Lösung per Collation wurde ja schon genannt. Ich persönliche würde das am Client mit einer eigenen Funktion lösen.