我有一个像这样的表结构
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,
答案 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