Theo: Sortierreihenfolge mysql

Hi,

bei folgender Query:

SELECT *
FROM user
LIMIT 0 , 30

wird nicht nach UserID(AUTO_INCREMENT, PRIMARY KEY) sortiert, was ich erwartet hätte.

Aber wonach sortiert mysql statdartmäßig, wenn ich es nicht spezifiziere?

Hmm, Theo

  1. Hi!

    SELECT *
    FROM user
    LIMIT 0 , 30
    wird nicht nach UserID(AUTO_INCREMENT, PRIMARY KEY) sortiert, was ich erwartet hätte.

    ORDER BY sortiert definiert, aber das weißt du sicher.

    Aber wonach sortiert mysql statdartmäßig, wenn ich es nicht spezifiziere?

    "Standard" schreibt sich das immer noch. Die Sortierreihenfolge ist offiziell undefiniert. Praktisch erhältst du das Ergebnis in der Regel nach der physikalischen Anordnung der Datensätze in der Datei. Diese kann man mit ALTER TABLE table ORDER BY ... einmalig sortieren lassen.

    Lo!

    1. Hi,

      Diese kann man mit ALTER TABLE table ORDER BY ... einmalig sortieren lassen.

      Was heißt "einmalig" in diesem Fall?

      Wenn ich also nach ID sortieren lassen und später doch lieber nach Usernamen, dann klappt das nimmer?

      Und noch eine Frage: Gibt es eine query, nach der ich die UserID nachträglich alphabetisch den Usernamen zuordnen kann?

      Grüße, Theo

      1. Hi,

        was stört dich daran deine Daten wie hier beschrieben zu sortieren?

        ~dave

        1. Hi,

          was stört dich daran deine Daten wie hier beschrieben zu sortieren?

          Hi Dave,

          eigentlich sollen die Daten alphabetisch sortiert werden. Mit einer Ausnahme. Dieser Eitrag soll in der Ergebnisliste zuletzt erscheinen. Wenn Du mir diese Query sagst, stört mich gar nichts mehr.

          Ansonsten würde ich gerne die Tabelle alphabetisch nach UserID umsortieren lassen und anschließend manuell diesem einen Account eine hohe ID zuweisen.

          Grüße, Theo

          1. Hi!

            Woran machst Du denn diesen Datensatz fest? Ein zufaelliger Datensatz soll ganz oben stehen und dann alle sortiert?

            --
            Vergesst Chuck Norris.
            Sponge Bob kann unter Wasser grillen!
            1. Hi,

              Woran machst Du denn diesen Datensatz fest? Ein zufaelliger Datensatz soll ganz oben stehen und dann alle sortiert?

              So ähnlich,

              Alle Usernamen sollen alphabetisch ausgegeben werden. Alleine einer soll zum Schluss kommen. Der ist aber nichtzufällig, sondern steht vorher fest. Z.B. Admin soll zum Schluß kommen, obwohl er ja mit A beginnt.

              In einer anderen DB heißt aber Admin anders, z.B. Webmaster.

              Und in noch einer anderen heißt Admin z.B. Fritz und daher soll dort Fritz zuletzt kommen.

              Ich hoffe, es war einigermaßen verständlich ausgedrückt?

              Grüße, Theo

              1. Ich hoffe, es war einigermaßen verständlich ausgedrückt?

                Nein, es war schon vorher verständlich - die Frage ist, welches Merkmal den Admin auszeichnet - ein Feld "isadmin" oder ähnliches?

                Kann es mehrere Admins geben?

                Es ist ansich kein Problem.

                Die einfachste Lösung ist vermutlich nach diesem Admin-Kriterium zu sortieren und dann erst alphabetisch - aber auch eine Lösung mit UNION käme in Frage.

                1. Die einfachste Lösung ist vermutlich nach diesem Admin-Kriterium zu sortieren und dann erst alphabetisch - aber auch eine Lösung mit UNION käme in Frage.

                  Hi,

                  lach, genau diese Lösung hatte ich auch soeben.
                  Hab sie sogar ChrisB schon gepostet.

                  Es gibt nur kein zusätzliches Adminkriterium. Es sei denn, man würde eine Spalte nehmen, in dem beim Admin (im Gegensatz zu allen anderen Usern) nichts (auch nicht 0 oder NULL) eigetragen ist.

                  Grüße, Theo

                  1. Es gibt nur kein zusätzliches Adminkriterium. Es sei denn, man würde eine Spalte nehmen, in dem beim Admin (im Gegensatz zu allen anderen Usern) nichts (auch nicht 0 oder NULL) eigetragen ist.

                    Und was spricht gegen 0 und 1 - warum muss es denn irgendwas und ein Leerstring sein was du vermutlich mit "nichts" meinst, wenn du 0 oder NULL ausschließt).

                    1. Und was spricht gegen 0 und 1 - warum muss es denn irgendwas und ein Leerstring sein was du vermutlich mit "nichts" meinst, wenn du 0 oder NULL ausschließt).

                      Nichts, im Gegentum.
                      Nur, die genannte Spalte hätte ich zweckentfremdet, die 0 und 1 Spalte habe ich neu hinzugefügt.

                      Gruß, Theo

          2. Hi,

            eigentlich sollen die Daten alphabetisch sortiert werden. Mit einer Ausnahme. Dieser Eitrag soll in der Ergebnisliste zuletzt erscheinen. Wenn Du mir diese Query sagst, stört mich gar nichts mehr.

            Wenn du dir selber überlegst, wie man dieses Problemchen (nach dem in Varianten schon öfter gefragt wurde) mittels eines zusätzlichen Sortierkriteriums, das man sich bspw. per IF() bastelt, lösen könnte, und wir dann auf die „gib's mir“-Mentalität verzichten können - dann stört mich auch nichts mehr :-)

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Sortierkriteriums, das man sich bspw. per IF() bastelt, lösen könnte,

              Aber das wäre doch Quatsch.
              Dann könnte ich auch nen Flag setzen, der immer auf 0 steht außer bei einem und das Ganze ohne IF() lösen mit ORDER BY Username,Flag

              Grüße, Theo

              1. Sortierkriteriums, das man sich bspw. per IF() bastelt, lösen könnte,

                Aber das wäre doch Quatsch.
                Dann könnte ich auch nen Flag setzen, der immer auf 0 steht außer bei einem und das Ganze ohne IF() lösen mit ORDER BY Username,Flag

                Natürlich umgekehrt:

                ORDER BY Flag, Username

              2. Hi,

                Sortierkriteriums, das man sich bspw. per IF() bastelt, lösen könnte,

                Aber das wäre doch Quatsch.

                Begründung, bitte?

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Sortierkriteriums, das man sich bspw. per IF() bastelt, lösen könnte,

                  Aber das wäre doch Quatsch.

                  Begründung, bitte?

                  Die interessiert mich auch ja - sofern jetzt nicht eine Antwort kommt in der etwas von flexiblen Nutzerrechten erzählt wird, die in einer anderen Tabelle liegen - aber auch das wäre dann Quatsch, weil man dieses Kriterium dann halt einfach per JOIN ins Boot holt und wieder danach sortieren kann.

                2. Begründung, bitte?

                  Dann könnte ich auch nen Flag setzen, der immer auf 0 steht außer bei einem und das Ganze ohne IF() lösen mit ORDER BY Flag,Username

                  Mfg, Theo

                  1. Hi,

                    Dann könnte ich auch nen Flag setzen, der immer auf 0 steht außer bei einem und das Ganze ohne IF() lösen mit ORDER BY Flag,Username

                    Wenn du es möglichst unflexibel haben willst, könntest du das machen, ja.

                    MfG ChrisB

                    --
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hi!

        Diese kann man mit ALTER TABLE table ORDER BY ... einmalig sortieren lassen.
        Was heißt "einmalig" in diesem Fall?

        Einmalig heißt, dass die Daten dann in der Tabelle so sortiert sind und bei Abfragen vielleicht auch so ausgegeben werden. Allerdings gibt es darauf keine Garantie und schon gar nicht, wenn irgendwelche Änderungen am Datenbestand vorgenommen werden.

        Wenn ich also nach ID sortieren lassen und später doch lieber nach Usernamen, dann klappt das nimmer?

        Der offizielle und garantiert sichere Weg ist die Verwendung der ORDER-BY-Klausel im SELECT-Statement.

        Und noch eine Frage: Gibt es eine query, nach der ich die UserID nachträglich alphabetisch den Usernamen zuordnen kann?

        Wenn die UserID keine fachlicher Wert ist (sondern lediglich zur Verwaltung, beispielsweise für Zuordnungen zu Daten in anderen Tabellen dient) ist es nicht sinnvoll, die IDs zu ändern. Wenn dich Lücken darin stören, die ergeben sich im laufenden Betrieb (durch Löschungen) und sind völlig normal.

        Lo!

  2. wird nicht nach UserID(AUTO_INCREMENT, PRIMARY KEY) sortiert, was ich erwartet hätte.

    Aber wonach sortiert mysql statdartmäßig, wenn ich es nicht spezifiziere?

    "willkürlich" - afaik hängt es aber vom Tabellentyp ab und kann potentiell nachvollzogen werden. InnoDB sortiert z.B. lt. diesem Post nach dem Primärschlüssel

    Wenn du eine bestimmte Reihenfolge willst, gibt eine an - so einfach ist das.