我正在尝试使用
PHP和sqlite表设置创建一个分层列表,如下所示:
| itemid | parentid | name | ----------------------------------------- | 1 | null | Item1 | | 2 | null | Item2 | | 3 | 1 | Item3 | | 4 | 1 | Item4 | | 5 | 2 | Item5 | | 6 | 5 | Item6 |
列表将使用无序列表构建,并允许这种类型的树结构:
Item1 |_Item3 |_Item4 Item2 |_Item5 |_Item6
我已经看到这对目录和平面数组完成了,但我似乎无法使用这种结构并且没有深度限制.
您正在使用教科书设计将分层数据存储在sql数据库中.此设计称为邻接列表,即层次结构中的每个节点都有一个到其直接父节点的parentid外键.
原文链接:https://www.f2er.com/php/137623.html使用此设计,您无法生成类似于您描述的树并支持树的任意深度.你已经弄明白了.
大多数其他sql数据库(Postgresql,Microsoft,Oracle,IBM DB2)都支持递归查询,从而解决了这个问题.但是sqlite和MysqL还不支持sql的这个功能.
所以你需要另一个解决方案来存储层次结构.有几种解决方案.有关说明和示例,请参阅我的演示文稿Models for Hierarchical Data with PHP and MySQL.
我通常更喜欢我称之为Closure Table的设计,但每种设计都有优点和缺点.哪一个最适合您的项目取决于您需要哪些类型的查询来有效地处理您的数据.所以你应该去研究解决方案并为自己选择一个.