我在mySQL表中有一个扁平的页面列表。
ID | Tab index | Page Name | parent 页可以是由“父”属性指定的另一个页的子页。
整个列表使用"Tab index“int列排序。
有谁能想出一种方法来查询这个列表
排序。
我的mySQL知识没有那么深。
这是一个现有的数据结构,不能更改。
谢谢您提供的任何信息。
发布于 2009-11-20 05:18:58
假设列id、页面名、表索引、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“顺序返回这些列,这是以下内容的第一个非空值:
这允许您将子表索引保留为空白,并让它们从父表“继承”。此外,如果您希望将默认的排序值推入底部,则可以将0(合并中的第三位arg )替换为(选择max(tabindex) +1 from page)。唯一的警告是,如果子表索引大于以下父表,则它将出现在列表的后面。
发布于 2009-11-20 02:44:09
如果您的页面仅嵌套1层深度,则可以执行... ORDER BY CASE WHEN parent IS NULL THEN id ELSE parent END, parent, tab_id。为了实现多层嵌套的相同结果,您需要递归查询,而MySQL不支持递归查询。
https://stackoverflow.com/questions/1767882
复制相似问题