这个问题很奇怪,我想我只是想错了。我试图(递归地)获取与给定承包商关联的所有页面 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 等)。
但是,人们似乎已经实现了如何遍历树的存储过程,因此您可以采用该方法。 示例:
关于mysql - SQL/MySQL 递归地从同一个表中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866246/