假设我有一个包含 wiki 页面的表格。这些属于 wiki_id 显示的某个 wiki。有不同的维基。所以表格看起来像这样:
ID: WIKI_ID: TITLE: PARENT_ID:
1 3 Page1 Null
2 3 Page2 1
3 3 Page3 1
4 3 Page4 3
5 3 Page5 4
6 4 Page1 Null
7 4 Page2 6
现在我的主要目标是将 Page3 和所有子页面复制到另一个 wiki。这就是我的问题,因为我使用的是 MySQL 数据库,所以我无法使用 with 子句来选择它们。
我找到了一种通过在标题字段中设置标签来选择所有需要的页面的方法。但我不能只是按原样插入它们,因为我需要调整parent_id。所以我的 table 应该是这样的。
ID: WIKI_ID: TITLE: PARENT_ID:
1 3 Page1 Null
2 3 Page2 1
3 3 Page3 1
4 3 Page4 3
5 3 Page5 4
6 4 Page1 Null
7 4 Page2 6
8 4 Page3 6
9 4 Page4 8
10 4 Page5 9
所以我的想法是这样的:
我首先从 wiki 中选择 Page3,其 wiki_id: 3
然后我选择新项目的起始页(Page1)以获取正确的parent_id。这个页面是我通过搜索某个项目的页面而得到的,其parent_id等于null,因为page3将始终是每个wiki中起始页面的子页面
此后,我将从表中选择所有页面,这些页面的parent_id等于来自wiki的page3的id,其中wiki_id:3,并从wiki中选择新的page3,其wiki_id:4以获得正确的结果再次parent_id并将其插入表中
如果我知道深度,我会一遍又一遍地重复最后一步,这正是我的问题。深度可能会随时间而变化。 希望您知道找到树中元素的最大深度的任何解决方案。我也愿意寻求其他解决方案来解决整个问题。
最佳答案
用另一种方法解决了。我刚刚插入了带有原始parent_id 的新页面。之后,我将它们加入到标题列中,以将原始 ID 和新 ID 放在同一行中。并通过将parent_id设置为页面的新ID来对每一行进行更新以更新新页面的页面
关于MySQL 递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113028/