排序平面列表,由父母分组

时间:2009-11-20 02:05:34

标签: sql mysql treeview

我在mySQL表中有一个单独的页面列表。

ID    | Tab index | Page Name | parent 

页面可以是其他页面的子页面,由“父”属性指定。

使用“Tab index”int列对整个列表进行排序。

任何人都可以想出一种查询此列表的方法,以便

  • 项目由Tabindex

  • 订购
  • 作为其他项目的子项目的项目在父项目后面分组,并按其选项卡排序(可选)?

我的mySQL知识没有那么深入。

这是现有的数据结构,无法更改。

提前感谢任何输入。

2 个答案:

答案 0 :(得分:1)

假设列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”顺序返回这些列,这是以下第一个非空值:

  1. 的tabindex
  2. 父母的tabindex
  3. 0
  4. 这允许您将子tabindexes留空并让它们从父级“继承”。此外,如果您希望将默认排序值推到底部,则可以使用(从页面中选择max(tabindex)+ 1)替换0(合并中的第三个arg)。唯一需要注意的是,如果子tabindex大于以下父级,它将在稍后的列表中出现。

答案 1 :(得分:0)

如果您的网页仅嵌套在1级深度,则可以... ORDER BY CASE WHEN parent IS NULL THEN id ELSE parent END, parent, tab_id。要通过多级嵌套实现相同的结果,您需要递归查询,MySQL不支持。