Jon*_*onB 258 mysql sql-order-by
目前我在声明中做了一个非常基本的OrderBy.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Run Code Online (Sandbox Code Playgroud)
这个问题是'position'的NULL条目被视为0.因此,位置为NULL的所有条目都出现在1,2,3,4之前.例如:
NULL, NULL, NULL, 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)
有没有办法实现以下排序:
1, 2, 3, 4, NULL, NULL, NULL.
Run Code Online (Sandbox Code Playgroud)
小智 538
MySQL有一个未记录的语法,可以最后对空值进行排序.在列名前面加一个减号( - )并将ASC切换到DESC:
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC
Run Code Online (Sandbox Code Playgroud)
它基本上是position DESC将NULL值置于最后但与之相同的相反position ASC.
这里有一个很好的参考http://troels.arvin.dk/db/rdbms#select-order_by
d-_*_*_-b 289
我发现这在很大程度上是一个很好的解决方案:
SELECT * FROM table ORDER BY ISNULL(field), field ASC;
Run Code Online (Sandbox Code Playgroud)
Dre*_*ewM 23
就像是
SELECT * FROM tablename where visible=1 ORDER BY COALESCE(position, 999999999) ASC, id DESC
Run Code Online (Sandbox Code Playgroud)
将999999999替换为该字段的最大值
sum*_*eet 17
NULL最后
SELECT * FROM table_name ORDER BY id IS NULL, id ASC
Run Code Online (Sandbox Code Playgroud)
这对我来说也很有效。
ORDER BY ISNULL(field), field = 0 ASC;
Run Code Online (Sandbox Code Playgroud)
返回 1 2 3 0 0 空 空