mysql排序顺序没有返回我需要的值
我有一个名为employee的表,我希望按数字排列此表,即最低数字(1)将首先排序,最高数字(20)将最后排序 因此,我在表中添加了一列: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
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)的行之前排序。有意义吗?:)哇!完全清楚。哇!我很高兴我鼓起勇气承认我不明白;我现在完全明白你是怎么做的了。非常感谢。我今天学到了一些新东西!