Mysql 如何在ORDERBY子句上编写条件

Mysql 如何在ORDERBY子句上编写条件,mysql,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

嗨,我有一个这样的桌子结构

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
我的要求是按顺序检索数据,即文件按名称排序,文件夹按名称排序 按显示顺序排序

我写了一个查询,但如果某个特定的父对象有10个以上的子对象,它将失败 显示顺序也可以作为字符串而不是数字 我的查询:

 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,

首先在显示文本上进行订购,如果is_file=1,则与您想要的一样。否则,您可以通过输入“zzz”(可以是任何字符串,如果您想先对行进行排序,请输入“aaaa”)来确保行在末尾排序。然后再按disp_顺序订购

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;
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

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

要以整数进行排序,请尝试以下操作:

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;

这个预排序首先是all Is_File=0,然后是all Is_File=1。但是,在每个组中,所有文件都将按其
名称
列排序,但文件夹将按其显示顺序排序

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;
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

感觉您的显示顺序是字符串(或字符)谢谢它按预期工作,我对放置字符串之类的东西表示怀疑如果您知道关于此的任何链接,请与我分享,这将有助于我。嗯,您必须放置“zzz”字符串,因为显示文本也是一个字符串。在order by子句中放置一个case不是问题,只要每个“case”产生相同的数据类型(在本例中为string)。如果此答案帮助您和/或解决了您的问题,请接受答案。这样,这个问题就不再是开放的,我们可以保持网站的干净。我尝试过这个问题,如果一个文件夹包含10个以上的文件夹,它就会失败