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个以上的文件夹,它就会失败