如何在order by子句上写条件

时间:2013-10-04 06:12:37

标签: mysql

我有一个像这样的表结构

id  name         is_file   disp_order   parent
1   PDF Folder   0         2    
2   textpdf1     1         1            1
3   PPT Folder   0         1    
4   testppt1     1         2            3
5   testppt2     1         1            3

我的要求是按顺序检索数据,即文件按名称和文件夹排序   按disp_order排序

我写了一个查询,但如果某个父母有超过10个孩子,那么它就会失败    disp_order也可以作为字符串而不是数字    Myquery:

 select id,nae,is_file,disp_order from contents 
where parent_id=3
order by case 
when is_file=1 then display_text
when is_file=0 then display_order 
end ASC;

在我的数据库父级3中有20个类型文件夹的记录,它就像这样获取订单    1,10,11,12,2,3,4,5,6,

3 个答案:

答案 0 :(得分:0)

首先你在display_text上订购,就像你想要的那样is_file = 1.否则你要确保在最后通过输入'zzz'排序行(可以是任何字符串,如果你想订购,请输入'aaaa'他们先)。然后还在disp_order上订购。

select id,nae,is_file,disp_order from contents 
where parent_id=3
order by case 
when is_file=1 then display_text
when is_file=0 then 'zzz'
end, disp_order;

我认为这是你想做的。否则请提供示例输出:)

答案 1 :(得分:0)

要以整数完成排序,请尝试以下方法:

select id,nae,is_file,disp_order from contents 
where parent_id=3
order by case 
when is_file=1 then display_text
when is_file=0 then display_order * 1
end ASC;

答案 2 :(得分:0)

首先对所有Is_File = 0进行预先排序,然后对所有Is_File = 1进行排序。但是,在每个组中,所有文件都将按其name列进行排序,但文件夹将按其disp_order排序。

select 
      c.id,
      c.`name`,
      c.is_file,
      c.disp_order,
      c.parent
   from
      contents c
   where
      c.parent=3
   order by
      c.is_file,
      case when is_file = 1 
         then c.`name` else c.display_order end