Standardsortierung durch MySQL?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Standardsortierung durch MySQL?

    Hi,

    ich hatte schon mehrfach den Fall, dass ich die Sortierung durch MySQL nicht ganz folgen konnte.

    Konkret: ich habe eine Abfrage über zwei Tabellen, bei den aus mehreren Spalten ein Wert (Preis) berechnet wird, nach dem dann sortiert wird. Im Ergebniss sind dann z.B. 4 Zeilen mit dem Preis "17,50", die mir aber nicht immer gleich sortiert zurückgeliefert werden.

    Gibt es bestimmte Regeln nach denen MySQL Ergebnisse sortiert, bzw. nach denen MySQL im Zweifelsfall (gleiche Werte bei der angegebenen Sortierung) entscheidet?

    Es ist schon etwas irritierend, das sich die Reihenfolge der Ergebnisse "einfach so" ändert.

    Gruss,
    Lenny

  • #2
    Hallo,

    bei der Sortierung werden gleiche Werte so belassen, wie sie vor der Sortierung vorlagen. Du kannst ja eine zweite Sortierspalte hinzufügen, z. B. den Name des Produkts oder die ID, damit es einheitlich ist.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von AmicaNoctis Beitrag anzeigen
      Hallo,

      bei der Sortierung werden gleiche Werte so belassen, wie sie vor der Sortierung vorlagen. Du kannst ja eine zweite Sortierspalte hinzufügen, z. B. den Name des Produkts oder die ID, damit es einheitlich ist.

      Gruß,

      Amica
      Hallo Amica,

      mehrere Sortiertparameter sind ja kein Problem, es wundert mich eben nur, das ich (ohne Angabe eines weiteren Sortierparamter) bei gleichem Preis mal die Artikel Reihenfolge A, B, C, D und bei einem anderen Aufruf B,C, A, D habe.

      Da muss dann entweder beim JOIN oder in einer der Tabellen noch irgendwas ... dynamisch ausgewertet werden?

      Gruss,
      lenny

      Kommentar


      • #4
        Sind in der Abfrage nichtdeterministische Funktionsaufrufe wie now(), curdate(), rand() enthalten? Wenn nicht, wäre mir das auch neu, dass die Sortierung dann willkürlich und jedesmal verschieden ist (es sei denn, zwischendurch wurden Deletes, Inserts oder Updates durchgeführt).
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          SQL Datenbanken kennen keine Sortierung außer im Statement per ORDER BY.


          Mysql kann auch:
          Code:
          Alter tabelle ORDER BY spalte
          o.ä.

          Damit kannst du eine Vorsortierung erreichen.
          Wir werden alle sterben

          Kommentar


          • #6
            Zitat von AmicaNoctis Beitrag anzeigen
            Sind in der Abfrage nichtdeterministische Funktionsaufrufe wie now(), curdate(), rand() enthalten? Wenn nicht, wäre mir das auch neu, dass die Sortierung dann willkürlich und jedesmal verschieden ist (es sei denn, zwischendurch wurden Deletes, Inserts oder Updates durchgeführt).

            Die einzige Funktion die ich (mehrfach) Aufrufe ist COALESCE(), die Abfrage selber wird zudem aber auch mit SQL_CACHE angestossen, weshalb mich die verschiedenen Ergebnisse ja noch mehr wundern.

            Zitat von combie Beitrag anzeigen
            SQL Datenbanken kennen keine Sortierung außer im Statement per ORDER BY.


            Mysql kann auch:
            Code:
            Alter tabelle ORDER BY spalte
            o.ä.

            Damit kannst du eine Vorsortierung erreichen.
            Sortieren selber ist ja nicht wirklich das Problem, ich frage mich halt nur wieso MySQL das einmal so und ein anderen mal eben anders sortiert. Das hatte ich schon einmal und habe seinerzeit eben einfach einen zweiten Sortierparameter mitgegeben, damit doktort man aber an den Symptomen, nicht aber an der Ursache herum.

            Kommentar


            • #7
              Zitat von Lennynero Beitrag anzeigen
              ich frage mich halt nur wieso MySQL das einmal so und ein anderen mal eben anders sortiert.
              Abgesehen davon, dass die Frage eigentlich vollkommen uninteressant ist - wenn du keine Sortierung explizit herstellst, darfst du auch keine in irgendeiner Form erwarten - kann das an vielen Faktoren hängen, bspw. Reorganisation mit veränderter Datenspeicherung, etc. pp.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Du magst zwar die gleiche Query auf die gleichen Daten loslassen. Aber MySQL kann trotzdem unterschiedliche Query Execution Plans erzeugen. Und selbst mit identischen QEPs ... sobald aus einem Cache oder von der Platte irgendwas sequentiell gelesen wird, was inzwischen reorganisiert wurde, ist die Reihenfolge im Ergebnis dementsprechend anders.

                Kommentar

                Lädt...
                X