这个问题很奇怪,我想我只是想到这个错误。我试图(递归地)获得与给定承包商相关联的所有页面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_category_id
中的reusable_sections
。如果我不得不停在那里,我会把它处理掉。但我遇到的警告是,每个返回的部分"可以"也是一个父部分。我尝试过嵌套的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
? JOIN
?我的大脑被炒了!帮助
答案 0 :(得分:1)
你有什么看起来像一棵树。如果你在谈论有限数量的导航,那么有限数量的左外连接就足够了。
但是,如果您有无限多个可能的级别,我认为您不能使用普通的旧SQL和连接来解决您的问题。
您将不得不求助于存储过程或编程语言(php,java等)。
但是,似乎人们已经实现了如何遍历树的存储过程,因此您可以通过这种方法。 例如: