MySQL 递归查询

标签 mysql ruby-on-rails recursive-query

假设我有一个包含 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/

相关文章:

php - 表单不断选择多个单选按钮

mysql - 使用 MySQL 分组时返回哪一行的字段?

JQuery Rails 样式表切换器不工作

postgresql - 包含/排除项目的父/子表

php - 以编程方式处理 'transaction'

php - 我可以使用 google maps pin 来填充我网页上的表单吗?

ruby-on-rails - Rails - 在 json 响应中包含关联

ruby-on-rails - 如何仅修改内存中的 zip 文件?

performance - 递归 CTE 导致缓慢和索引扫描

postgresql - 如何在使用递归选择后代的 Postgres 查询中打印深度级别?