2

嗨,我有一个像这样的表结构

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;

在我的 DB 父级 3 中有 20 条文件夹类型的记录,它获取这样的顺序 1,10,11,12,2,3,4,5,6,

4

3 回答 3

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
于 2013-10-07T09:15:58.237 回答
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;
于 2013-10-04T07:44:33.503 回答
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;

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

于 2013-10-04T06:22:19.173 回答