我有一个wiki类型的应用程序,管理员可以在其中创建页面。必须将每个页面放入菜单系统,该系统由管理员即时创建
Menu Heading
L Subheading
L Page1
但是,菜单可能有更多页面,例如:
Menu Heading
L Subheading
L Page1
L New Subheading
L Page2
菜单必须易于修改,必须有办法订购标题/副标题以及内页。
所以基本上,一个完全动态的菜单是我不需要任何种类的静态数据。
我有一个当前的方法,但我无法控制页面顺序。如果我没有得到很多回应如何去做,我将提出我目前的做事方式(我只是不想把想法放到你的脑海中,我正在寻找一种新的方法)
由于
编辑:谢谢大家的回复,但是,我认为情况比我现在可以说的要复杂得多。让我想一个更好的方式来问我的问题...我可能会在下周重新发布
答案 0 :(得分:1)
使用hierarchical schema,为每个项目添加排序顺序,就是这样。
答案 1 :(得分:1)
完成具有父级的系统的最简单方法 - >孩子 - >孩子...关系将是一棵树。使用可能如下所示的设置:
id | name | parent | tree_left | tree_right
----+-----------+--------+-----------+-----------
0 | root | NULL | 0 | 9
1 | child1 | 0 | 1 | 4
2 | subchild1 | 1 | 2 | 3
3 | child2 | 2 | 5 | 8
4 | subchild2 | 3 | 6 | 7
这将是以下数据库:
root
|_ child 1
|_ subchild 1
|_ child 2
|_ subchild 2
你可以在2个简单的查询中得到完整的结构:
SELECT * from menu WHERE name = root;
SELECT * FROM menu WHERE tree_left > $root['tree_left'] AND tree_right < $root['tree_right'] order by tree_left DESC;
添加子项时,必须扩大父树_left与右项之间的差距。你应该在你的sub,sub items等中递归地执行此操作。如果我没有误会,可以在1个查询中完成。
尝试在网上搜索更详细的示例,这是一种常用的树结构,称为嵌套集。
答案 2 :(得分:0)
如下结构表应该这样做。
MenuItemId | ParentId |订单|含量
TopLevelItem1 (MenuItemId: 1)
|
|-> MenuItem2 (ParentId: 1, Order 1)
|-> MenuItem3 (ParentId: 2, Order 2)
TopLevelItem2 (MenuItemId: 4)
|
|-> MenuItem4 (ParentId: 4, Order 1)
等。
插入商品只需要简单的重新订购。
答案 3 :(得分:0)
您正在寻找什么,称为递归,这是相关问题example,我也建议您阅读this article。
答案 4 :(得分:0)
你想知道什么?
如果您对结构感兴趣,请查看MySQL网站上的this article on hierarchical data。