在树中移动对象,其中所有子对象引用其所有父对象

o8x7eapl  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(227)

我想问的是,是否有一种方法比我目前设置的方法更好地处理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]=新职位的职位

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题