有没有办法在php和mysql中实现树ADT?

时间:2011-11-19 00:25:39

标签: php mysql data-structures tree hierarchical-data

在PHP和Mysql中是否存在使用树数据结构存储和工作(添加,删除等等)的方法?

PHP的RecursiveItrator Itrator可以在这里使用吗?

所以基本上我想要树结构,存储一些层次结构,比如某些产品的类别可以无限期地继续下去。能够将所有内容存储在数据库中,获取它们并执行简单的操作(如BFS和DSF)会非常好遍历他们。

1 个答案:

答案 0 :(得分:2)

使用Adjacency List时获取给定树的所有节点的好方法是向每个名为root_id的行添加一列,这样每个节点不仅知道它的直接父节点,而且还知道树中的顶级节点。

CREATE TABLE Comments (
  comment_id INT PRIMARY KEY,
  root_id INT,
  parent_id INT,
  FOREIGN KEY (root_id) REFERENCES Comments (comment_id),
  FOREIGN KEY (parent_id) REFERENCES Comments (comment_id)
);

因此,如果您的层次结构为10 - > 20 - > 30,你要存储以下内容:

INSERT INTO Comments SET comment_id = 10, root_id = 10;
INSERT INTO Comments SET comment_id = 20, root_id = 10, parent_id = 10; 
INSERT INTO Comments SET comment_id = 30, root_id = 10, parent_id = 20; 

这与Slashdot存储评论树的方式类似。

如果您可以编写查询以获取给定树的所有节点,并且每个节点都知道其直接父节点,则以存储分层数据的Adjacency List设计的样式,您可以将查询结果集转换为多维你拿到它的数组或对象树。

请参阅我对Convert flat array to the multi-dimentional的回答,了解在PHP中执行此操作的代码。

相关问题