2009-11-27 8 views
5

In Mysql, wenn Sie eine SELECT-SQL-Anweisung ausführen, gibt es eine Standardreihenfolge, wenn Sie keine Sortierklausel enthalten, wie die Standardreihenfolge umzukehren? Fügen Sie einfach DESC hinzu?Wie die Standardreihenfolge in Mysql umzukehren?

+0

Duplizieren: http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 –

+0

Es gibt keine "Standard-Bestellung" Sie können es also nicht "umkehren". –

Antwort

3

Es gibt keine garantierte Reihenfolge, wenn Sie keine ORDER BY-Klausel angeben, daher ist die "Umkehrung der Standardreihenfolge" nicht definiert.

+0

Für diejenigen, die Antworten mit Beweisen bevorzugen, um die Behauptungen zu stützen: https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

Ich denke, Sie würden besser bedient werden, indem Sie die Reihenfolge angeben, die Sie eigentlich wollen. Tabellen haben von Natur aus keine Reihenfolge. Es wird wahrscheinlich nur in der Reihenfolge angezeigt, in der die Zeilen eingefügt wurden - obwohl es keine Garantie gibt, dass es in dieser Reihenfolge bleibt.

Die Chancen stehen gut, werden Sie wahrscheinlich diese nur hinzufügen möchten:

ORDER BY id DESC 

... da die meiste Zeit verwenden die Menschen ein Feld mit automatischer Erhöhung „id“ genannt

+0

Aber wie schade, In der Tabelle gibt es kein "Id" -Feld. – Steven

+0

Aber wenn es kein Id-Feld oder Äquivalent gibt, ist die Reihenfolge sinnvoll? – pavium

+0

Ich denke, die Standardreihenfolge, in der die Zeilen eingefügt wurden, ist die Standardreihenfolge "zuerst eingefügt, zuletzt". Ich möchte es in "Zuerst eingefügt, zuerst heraus" ändern. – Steven

5

Wenn Sie das wollen, Daten, um konsistent geordnet zu kommen, müssen Sie ORDER BY gefolgt von den Spalten verwenden, die Sie die Abfrage bestellen möchten. ASC ist der Standardwert, Sie müssen ihn also nicht angeben. IE:

ORDER BY your_column 

... ist das Äquivalent zu:

ORDER BY your_column ASC 

ASC/DESC ist auf einer pro Spalte Basis. Zum Beispiel:

ORDER BY first_column, second_column DESC 

... bedeutet, dass die Abfrage die resultset als Kombination sortiert die first_column in aufsteigender Reihenfolge, second_column in absteigender Reihenfolge.

+0

Die Reihenfolge, die ich brauche, ist die umgekehrte Reihenfolge, in der die Zeilen eingefügt wurden. "Zuerst eingefügt, zuerst raus". – Steven

+1

@Steven: Sie müssen die Ausgabe von 'DESCRIBE [Ihr Tabellenname hier]] aus Ihrer Datenbank bereitstellen, bevor ich vorschlagen kann, was zu verwenden ist. Wenn Sie eine Primärschlüsselspalte für die automatische Nummerierung haben - ordnen Sie sie nach 'ASC' an.Die nächste beste Sache wäre eine date_created-Spalte, die den Datetime-Datentyp verwendet. Nochmals, ASC. –

1

Sofern Sie keinen Spaltennamen in einer ORDER BY Klausel angeben können, können Sie DESC nicht verwenden, und Sie müssen auf Tricks zurückgreifen, die LIMIT enthalten, um die letzten Datensätze zu sehen.

Das wäre nicht zufriedenstellend, denke ich.

3

Sie können einen Zähler in Ihrem Ergebnisfelder gesetzt und die Verwendung dieser Art:

SELECT *, @counter := @counter + 1 AS 'counter' FROM tableName, (SELECT @counter := 0) r ORDER BY counter DESC 

Ich denke, es wird funktionieren, wie Sie wollen.

+1

JA !! Es klappt ! Vielen Dank ! Du hast die Frage perfekt beantwortet. – Jerry

+0

@Jerry Aber das ist genau das Gegenteil der Reihenfolge, in der die Zeilen abgerufen wurden, die keine garantierte Verbindung mit der Implementierungsreihenfolge hat, die wiederum keine Garantie hat, etwas Besonderes zu sein. Wenn eine Bestellung garantiert werden soll, muss sie in den Daten enthalten sein. * Auch * gibt es keine Garantien für Abfragen, die sowohl eine Variable setzen als auch lesen, so dass diese Abfrage ein undefiniertes Verhalten hat. Für einen bestimmten kürzlichen Build * von 5,7 Leuten bei Percona, der sich die Implementierung angeschaut hat, sah man, dass die bestimmte Verwendung von Variablen in 'case'-Ausdrücken (* nicht *) ein bestimmtes vorhersagbares Verhalten ergibt. Bis. – philipxy