我在mySQL表中有一个单独的页面列表。
ID | Tab index | Page Name | parent
页面可以是其他页面的子页面,由“父”属性指定。
使用“Tab index”int列对整个列表进行排序。
任何人都可以想出一种查询此列表的方法,以便
项目由Tabindex
作为其他项目的子项目的项目在父项目后面分组,并按其选项卡排序(可选)?
我的mySQL知识没有那么深入。
这是现有的数据结构,无法更改。
提前感谢任何输入。
答案 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”顺序返回这些列,这是以下第一个非空值:
这允许您将子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不支持。