目前,我正在做一个非常基本的orderby在我的发言。
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.
目前,我正在做一个非常基本的orderby在我的发言。
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.
12条答案
按热度按时间deikduxw1#
mysql有一个未记录的语法来最后对null进行排序。在列名前放置减号(-),并将asc切换为desc:
它本质上是
position DESC
将空值放在最后,但在其他方面与position ASC
.这里有一个很好的参考资料http://troels.arvin.dk/db/rdbms#select-订购人
628mspwn2#
为了一个
DATE
可以使用的列:最后为空:
最后空格:
nr9pn0ug3#
你为什么不最后点空的呢?
vqlkdk9b4#
上次为空
mwkjh3gx5#
你可以在
ORDER BY
声明:如果希望空值在底部排序,请尝试
coalesce(position, 100000)
. (使第二个数大于所有其他数position
在数据库中。)oaxa6hgo6#
zzlelutf7#
您可以用一个不同的值交换null的示例,以便首先(如0或-1)或最后(一个大数字或一个字母)对它们进行排序。。。
nszi6y058#
尝试使用此查询:
hrirmatl9#
这很有效:
wd2eg0qa10#
像这样的
将999999999替换为字段的最大值
ve7v8dk211#
达到以下效果:
1, 2, 3, 4, NULL, NULL, NULL.
使用语法,放置-(minus sign)
在字段名之前,使用逆序类型(例如:如果要按asc顺序排序,则使用desc;如果要按desc顺序排序,则使用asc)SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC
bkhjykvo12#
我发现这在很大程度上是一个很好的解决方案: