Archiv verlassen und diese Seite im Standarddesign anzeigen : Standardsortierung durch MySQL?
Lennynero 05-02-2010, 13:11 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
AmicaNoctis 05-02-2010, 13:21 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
Lennynero 05-02-2010, 13:30 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
AmicaNoctis 05-02-2010, 13:35 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).
SQL Datenbanken kennen keine Sortierung außer im Statement per ORDER BY.
Mysql kann auch:
Alter tabelle ORDER BY spalte
o.ä.
Damit kannst du eine Vorsortierung erreichen.
Lennynero 05-02-2010, 13:49 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.
SQL Datenbanken kennen keine Sortierung außer im Statement per ORDER BY.
Mysql kann auch:
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.
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.
onemorenerd 05-02-2010, 14:27 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.
|
-
- |