Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql排序顺序没有返回我需要的值_Mysql_Sorting - Fatal编程技术网

mysql排序顺序没有返回我需要的值

mysql排序顺序没有返回我需要的值,mysql,sorting,Mysql,Sorting,我有一个名为employee的表,我希望按数字排列此表,即最低数字(1)将首先排序,最高数字(20)将最后排序 因此,我在表中添加了一列: ADD COLUMN sort_order INT DEFAULT 0 我遇到的问题是,表中的“0或空字段”排序在实际数字之前 有人能告诉我需要做些什么来避免默认值0首先出现;i、 e,是否有另一个默认值可以使用。这将把排序顺序为空或为0的行放在底部: SELECT * FROM yourtable ORDER BY sort_order IS NU

我有一个名为employee的表,我希望按数字排列此表,即最低数字(1)将首先排序,最高数字(20)将最后排序

因此,我在表中添加了一列:

ADD COLUMN  sort_order INT DEFAULT 0
我遇到的问题是,表中的“0或空字段”排序在实际数字之前


有人能告诉我需要做些什么来避免默认值0首先出现;i、 e,是否有另一个默认值可以使用。

这将把排序顺序为空或为0的行放在底部:

SELECT *
FROM yourtable
ORDER BY
  sort_order IS NULL OR sort_order=0,
  sort_order

因为
sort\u-order为空或sort\u-order=0
为假时将计算为0,为真时将计算为1。

您可以通过按
sort\u-order=0、sort\u-order
排序,使
0排在最后

sort_order=0
如果
sort_order=0
则值为1,否则值为0,因此按该值排序将使0值排在最后

SELECT ... ORDER BY sort_order=0, sort_order

两个已经回答的答案都是正确的,并且会给出相同的结果,此外,您还可以使用以下查询

select * from Table1 order by 
case when sortorder = 0 then 1 else 0 end, sortorder ASC

演示在

不确定mysql,但在oracle中,您可以省略默认值(因此,如果没有给出任何值,列将为空),然后使用
order by sort\u order nulls last
。当然,您也可以使用99999作为默认值,然后在输出代码中执行某些操作以防止打印99999。在业务逻辑级别上,
0
NULL
之间有什么区别?@andrea115-该列有何用途?fathah rehman:该列仅用于整理结果。用户将能够为每列分配一个数字:根据他们希望首先分配的数字,请您解释一下逻辑,我有点困惑,您的查询运行良好,我试图理解逻辑,如果sort_order=0,那么它应该首先在结果中显示,最后的结果。@Deepika比较
sort\u order=0
的值为
1
,如果为真(即sort\u order=0),否则为
0
。由于
0
1
之前排序,因此
sort\u order
不等于零的行将在
sort\u order=0的行之前排序。感谢您的解释,这将非常有帮助,此选项比使用case@andreea115Equals
=
在这种情况下,将比较两个值,如果边相等,则返回1,否则返回0。换句话说,
5=5
的值为1,
5=4
的值为0。由于我们按
排序顺序=0
,因此边相等(排序顺序等于0)的行的值为1,不相等的行的值为0。当我们按它排序时,0将在1之前排序,因此排序顺序不等于0(值0)的行将在排序顺序等于0(值1)的行之前排序。有意义吗?:)哇!完全清楚。哇!我很高兴我鼓起勇气承认我不明白;我现在完全明白你是怎么做的了。非常感谢。我今天学到了一些新东西!