我想问的是,是否有一种方法比我目前设置的方法更好地处理mysql中的分层数据。
在我的 mysql
数据库我正在为论坛存储浅层次结构:
Titles(0) > Boards(1) > Threads(2) > Comments(3) type(0, 1, 2, 3)
层次结构表示如下:
Table 1: posts.title, posts.id, posts.type
post.title(title is the data within the post)
post.id(id is the primary key of the post)
post.type((what level)/(how deep) the post is in the hierarchy)
Table 2: parent_tree=(pt) pt.child, pt.parent
pt.child (primary key of a post)
pt.parent (primary key of post which is a parent of the child post)
每个post都有一个自引用的父目录树条目(例如:创建新post id=7
结果 parent_tree
一个新条目 7
而父母是 7
:
每一篇文章在创建时也会复制所有 PARENTS
在其下创建的父级的(也包括其自引用)。
插入( POST
)很简单。在创建一个新的post时,将进行两个查询—一个用于插入新post,第二个用于插入其父树对应项,该父树对应项将子树设置为外键(带 ON DELETE CASCADE
).
获取( GET
)很简单,用户可以通过 id
/ title
以及 type
.
删除( DELETE
)很简单,一个职位由 id
/ title
以及 type
被删除(因此它的外键父目录树条目)。
移动( PUT
)是其中最复杂的,它由两个查询组成。
在此操作中,将选择一篇文章( title
/ id
)和一个( parent_title
/ parent_id
)指定什么 parent
它正被移到下面。
第一个查询-全选 parent_tree
如果parent id=要移动的文章的id,请选择all parent_tree
其中child是上一次选择的结果的条目,返回要移动的帖子的所有子项及其所有父项。然后,从此选择中删除所有父项、子项对,其中父项也是所选文章的父项
(短)删除中的条目 parent_tree
父级作为子级拥有post的post及其子级。
第二个查询-插入正在移动的文章的子级和文章本身,以及所选文章所附加的新父级(包括自引用)的所有父级。
下面是我如何在 mysql
对于搬家(完全开放的建议,我是比较新的 mysql
学习)。
第一个查询:
DELETE t FROM parent_tree AS t INNER JOIN parent_tree AS c ON t.child=c.child INNER JOIN parent_tree AS p ON t.parent=p.parent WHERE c.parent IN (SELECT id FROM posts WHERE title=?) AND p.child<>p.parent AND p.child IN (SELECT id FROM posts WHERE title=?)
?[0,1]=正在移动的帖子的标题
第二个查询:
INSERT INTO parent_tree(child,parent) (SELECT t.child, p.parent FROM parent_tree AS t INNER JOIN parent_tree AS p WHERE t.parent IN (SELECT id FROM posts WHERE title=?) AND p.child IN (SELECT id FROM posts WHERE title=?) AND t.child<>p.parent)
?[0]=正在移动的职位的职位,[1]=新职位的职位
暂无答案!
目前还没有任何答案,快来回答吧!