mysql - SQL/MySQL 递归地从同一个表中提取

标签 mysql sql recursion logic

这个问题很奇怪,我想我只是想错了。我试图(递归地)获取与给定承包商关联的所有页面 URL。三个相关表是:

|-------------------------------------------------|
|                 client_sections                 |
|-------------------------------------------------|
|    contractor_id    |    reusable_section_id    |
|-------------------------------------------------|

|--------------------------------------------------------|
|                     reusable_sections                  |
|--------------------------------------------------------|
|    reusable_category_id    |    reusable_section_id    |
|--------------------------------------------------------|

|--------------------------------------------|
|             reusable_content               |
|--------------------------------------------|
|    reusable_section_id    |    page_url    |
|--------------------------------------------|

现在需要 -- 第一个查询是

SELECT reusable_section_id FROM client_sections where contractor_id = '119'

这将获取所有顶级“父部分”——即表reusable_sections中的reusable_category_id。如果我必须停在那里,我会处理它。但我遇到的警告是,每个返回的部分“也可能”是部分。我尝试过嵌套SELECT,结果简直是灾难性的!

我正在尝试:

» Get contractor parent sections by contractor ID from client_sections table

    » get sections by reusable_category_id = reusable_section_id in reusable_sections  -- 

        » get page_url for all the sections returned (including the initial parents) 
          by reusable_section_id in reusable_content  -- I am good until this point

            » recur the last two steps with the current reusable_section_id as 
              reusable_category_id to check for children  (!!#$@#!!!)

                » Finally return all pages for all sections under that contractor_id 

我尝试过各种查询,从疯狂的JOINS到嵌套的SELECT,但都无济于事。我读过很多帖子,包括This One 。我是一名称职的 SQL 开发人员,我认为我的逻辑有缺陷,正确方向上的一个简单点可能会激发我的创造力!最好的方法是 WHILE 循环吗?嵌套SELECT加入?我的脑子炸了!帮忙?

最佳答案

你拥有的看起来像一棵树。如果您正在谈论浏览有限数量的级别,那么有限数量的左外连接就足够了。

但是,如果您有无限多个可能的级别,我认为您无法使用普通的旧 SQL 和联接来解决您的问题。

您将不得不求助于存储过程或编程语言(php、java 等)。

但是,人们似乎已经实现了如何遍历树的存储过程,因此您可以采用该方法。 示例:

Using MySQL query to traverse rows to make a recursive tree

关于mysql - SQL/MySQL 递归地从同一个表中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866246/

相关文章:

sql - Access 选择语句中的 Row_Number()

c# - 计算有两个相同儿子的节点

php - 我可以在不更新父表的情况下更新子表吗

php - MYSQL 结果中单引号内的双引号?

mysql - 选择最高时间而不重复

php - MySQL/PHP : Cannot select from database but the element exists

sql - SQL Server 中的 ORACLE Con​​nect by 子句等效项

sql - 在 Web 应用程序中提供快速 `select count(*)` 功能

Javascript++ 运算符优先级

javascript - 使用递归的一维数组迭代