目前我正在我的声明中做一个非常基本的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.

当前回答

类似的

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

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

其他回答

这是简单的。你只需要订购两次:

第一步,订购null 第二步,整理你的领域。

SELECT * FROM table_name 
ORDER BY ISNULL(field_name), field_name;

它适用于任何类型,包括JSON。

你可以用不同的值交换NULL实例来排序它们的第一个(比如0或-1)或最后一个(一个大数字或字母)…

SELECT field1, IF(field2 IS NULL, 9999, field2) as ordered_field2
  FROM tablename
 WHERE visible = 1
 ORDER BY ordered_field2 ASC, id DESC

类似的

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

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

这对我来说也很有效。

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

返回 1 2 3. 0 0 零 零

空最后

SELECT * FROM table_name ORDER BY id IS NULL, id ASC