提问人:Pekka 提问时间:11/20/2009 最后编辑:Pekka 更新时间:11/20/2009 访问量:485
对平面列表进行排序,按父级分组
Sort flat list, group by parents
问:
我在mySQL表中有一个平面页面列表。
ID | Tab index | Page Name | parent
页面可以是另一个页面的子级,由“parent”属性指定。
整个列表使用 “Tab index” int 列进行排序。
任何人都可以想出一种方法来查询此列表,以便
项目按 Tabindex 排序
作为另一个项目的子项分组在父项后面,并按其选项卡索引排序(可选)?
我的mySQL知识没有那么深。
这是现有的数据结构,无法更改。
提前感谢您的任何意见。
答:
0赞
Aleksander Kmetec
11/20/2009
#1
如果你的页面只有 1 级深度,你可以这样做。为了在多级嵌套中实现相同的结果,您需要递归查询,而MySQL不支持递归查询。... ORDER BY CASE WHEN parent IS NULL THEN id ELSE parent END, parent, tab_id
评论
0赞
Pekka
11/20/2009
这看起来很棒,我明天会尝试一下并发布反馈。谢谢。
1赞
scribble
11/20/2009
#2
假设列 id、pagename、tabindex parent_id
select *,
coalesce(
tabindex,
(select p2.tabindex from page as p2 where p2.id = p.parent_id limit 1),
0
) as ti
from page as p
order by coalesce(ti, p.tabindex)
;
将按“ti”顺序返回这些列,这是以下值的第一个非 null 值:
- tabindex
- 父级的 TabIndex
- 0
这样,您就可以将子 tabindexes 留空,并让它们从父级“继承”。此外,如果您希望将默认排序值推到底部,则可以将 0(合并中的第三个参数)替换为 (select max(tabindex) + 1 from page)。唯一需要注意的是,如果子 tabindex 大于以下父 tabindex,它将出现在列表的后面。
评论