Isi*_*sis 5 mysql sql select sql-order-by
我有一个数据库
id | parentid | name
1 | 0 | CatOne
2 | 0 | CatTwo
3 | 0 | CatThree
4 | 1 | SubCatOne
5 | 1 | SubCatOne2
6 | 3 | SubCatThree
Run Code Online (Sandbox Code Playgroud)
我怎样才能选择该猫排序id,parentid?那是
CatOne 1
--SubCatOne 4
--SubCatOne2 5
CatTwo 2
CatThree 3
--SubCatThree 6
Run Code Online (Sandbox Code Playgroud)
假设你的桌子被命名为猫,试试这个:
select * from cats
order by
case when parentid = 0 then id else parentid end,
case when parentid = 0 then 0 else id end
Run Code Online (Sandbox Code Playgroud)
更新以包括父项与子项相比具有更高ID的时间
这应该可以做到...除了名称的双破折号“--”前缀...
SELECT
t1.name,
t1.id
FROM
Table1 t1
ORDER BY
case when t1.parentID = 0 then t1.ID else t1.ParentID end,
case when t1.parentID = 0 then '1' else '2' end,
t1.id
Run Code Online (Sandbox Code Playgroud)
按第一个情况/时间的顺序将所有属于顶级的项目或按照主要级别的 ID 置于次要级别的项目。因此,如果您有超过 1000 个条目,尝试使用提供的父 * 1000 个示例 hack 不会有问题。第二个情况/时间将在父 ID = 0 时强制到其分组列表的顶部及其下方的所有子条目,但在下一个父 ID 之前。
但是,如果您确实想要双破折号,请更改为
SELECT
if( t1.ParentID = 0, '', '--' ) + t1.name name,
<rest of query is the same>
Run Code Online (Sandbox Code Playgroud)