目前,我正在我的声明中做一个非常基本的排序.

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

问题是"position"的空条目被视为0.因此,所有位置为NULL的条目出现在位置为1,2,3,4的条目之前.如:

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

是否有办法实现以下订购:

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

推荐答案

MySQL有一个未记录的语法来最后排序空值.在列名前加一个减号(-),并将ASC切换为DESC:

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

它本质上是position DESC的倒数,将空值放在最后,但在其他方面与position ASC相同.

这里有一个很好的参考

Mysql相关问答推荐

根据键的数量,SQL Json字段分为行

如何有效地计算共同的朋友/追随者?

一次又一次地删除事件行

用于搜索从各种表中获得的结果的查询

基于多行从表中 Select

MySQL-如何检测时间戳中的一天

SQL Select 最大值和平均值

外部磁盘上的MySQL表空间和数据文件

如何计算具有权重属性的记录数

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

使用 Having 表达式连接多个表

在 Spring Data jpa 中的 @Query 中无法识别本机查询

使用另一个表中的值更新一个表中的值

当每组的列值发生变化时 Select 并连接行

如何在任何连续范围内获得最大值

在 MySQL 中使用三个表进行计算

MySQL 如何处理并发插入?

PHP PDO 与普通 mysql_connect

是否可以在 macOS 上只安装 mysqldump

为什么在 MySQL 中使用外键约束?