目前我正在我的声明中做一个非常基本的orderderby。

SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC

这样做的问题是,“position”的NULL条目被视为0。因此,所有位置为NULL的条目都出现在位置为1,2,3,4的条目之前。例如:

NULL, NULL, NULL, 1, 2, 3, 4

有没有办法实现以下排序:

1, 2, 3, 4, NULL, NULL, NULL.

当前回答

达到以下结果:

1 2 3 4,空,空,空。

使用语法,在字段名前放置-(减号)并使用逆order_type(例如:如果你想按ASC顺序排序,那么使用DESC,如果你想按DESC顺序排序,那么使用ASC)

SELECT * FROM tablename WHERE visible=1

其他回答

你为什么不按NULLS LAST排序呢?

SELECT * 
FROM tablename
WHERE visible = 1 
ORDER BY position ASC NULLS LAST, id DESC 

对于DATE列,您可以使用:


取消:

ORDER BY IFNULL(`myDate`, '9999-12-31') ASC

空格:

ORDER BY IF(`myDate` = '', '9999-12-31', `myDate`) ASC

这工作得很好:

SELECT * FROM tablename ORDER BY position = 0, position ASC;

position
1 
2
3
0
0

这对我来说也很有效。

ORDER BY ISNULL(field), field = 0 ASC;

返回 1 2 3. 0 0 零 零

类似的

SELECT * FROM tablename where visible=1 ORDER BY COALESCE(position, 999999999) ASC, id DESC

将999999999替换为该字段的最大值