Derzeit mache ich eine sehr einfache OrderBy in meiner Erklärung.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Das Problem dabei ist, dass NULL-Einträge für 'Position' als 0 behandelt werden. Daher erscheinen alle Einträge mit Position als NULL vor denen mit 1,2,3,4. z.B:
NULL, NULL, NULL, 1, 2, 3, 4
Gibt es eine Möglichkeit, die folgende Reihenfolge zu erreichen:
1, 2, 3, 4, NULL, NULL, NULL.
mysql
sql-order-by
JonB
quelle
quelle
Antworten:
MySQL hat eine undokumentierte Syntax, um Nullen zuletzt zu sortieren. Setzen Sie ein Minuszeichen (-) vor den Spaltennamen und schalten Sie den ASC auf DESC:
Es ist im Wesentlichen die Umkehrung der
position DESC
Platzierung der NULL-Werte als letztes, aber ansonsten dasselbe alsposition ASC
.Eine gute Referenz finden Sie hier http://troels.arvin.dk/db/rdbms#select-order_by
quelle
- col_name
ist ein Ausdruck (0 - col_name
), den die ORDER BY-Klausel akzeptiert. Dies funktioniert natürlich nur für numerische Spalten.date
undtime
Spalten! (MySQL 5.5). Ich denke (ich bin faul zu überprüfen), dass es für alle zahlenähnlichen Spalten (Zeitstempel, Float ...) funktioniert.Ich fand das größtenteils eine gute Lösung:
quelle
SELECT * FROM table ORDER BY ISNULL(field) ASC;
(MySQL 5.5)NULLS LAST
| verwendenNULLS FIRST
um es anstelle der Problemumgehungen hier umzudrehen.Etwas wie
Ersetzen Sie 999999999 durch den Maximalwert für das Feld
quelle
NULL LETZT
quelle
Sie können Instanzen von NULL gegen einen anderen Wert austauschen, um sie zuerst (wie 0 oder -1) oder zuletzt (eine große Zahl oder ein Buchstabe) zu sortieren ...
quelle
Versuchen Sie es mit dieser Abfrage:
quelle
Sie können sich verbinden Ihre NULLs in der
ORDER BY
Aussage:Wenn Sie möchten, dass die NULL-Werte unten sortiert werden, versuchen Sie es
coalesce(position, 100000)
. (Machen Sie die zweite Zahl größer als alle anderenposition
in der Datenbank.)quelle
quelle
Für eine
DATE
Spalte können Sie verwenden:NULL zuletzt:
Leerzeichen zuletzt:
quelle
Um folgendes Ergebnis zu erzielen:
1, 2, 3, 4, NULL, NULL, NULL.
-(minus sign)
Verwenden Sie die Syntax, setzen Sie sie vor den Feldnamen und verwenden Sie inverse order_type (wie: Wenn Sie nach ASC-Reihenfolge bestellen möchten, verwenden Sie DESC oder wenn Sie DESC-Reihenfolge möchten, verwenden Sie ASC)SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC
quelle
Das funktioniert gut:
quelle
Warum bestellen Sie nicht bei NULLS LAST?
quelle
NULLS LAST
- Welche Version von MySQL wurde eingeführt?