首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在php和mysql中实现树型ADT?

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

Stack Overflow用户
提问于 2011-11-19 08:25:39
回答 1查看 512关注 0票数 1

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

PHP的RecursiveItrator Itrator在这里有什么用处吗?

所以基本上我想要树形结构,来存储一些层次结构,比如一些产品的类别,可以无限地继续下去,如果能够在数据库中存储所有内容,获取它们,并在其中执行BFS和DSF遍历等简单的事情,那将是非常好的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-19 08:52:44

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

代码语言:javascript
运行
复制
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的层次结构,您将存储以下内容:

代码语言:javascript
运行
复制
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存储评论树的方式。

如果您可以编写一个查询来获取给定树的所有节点,并且每个节点都知道其直接父节点,则可以按照存储分层数据的邻接列表设计风格,在获取查询结果集时将其转换为多维数组或对象树。

关于用Convert flat array to the multi-dimentional实现这一点的代码,请参阅我对PHP的回答。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8190828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档