【发布时间】:2014-02-10 16:02:19
【问题描述】:
我有一个处理复杂 JOIN 查询的任务。
表 1:object_category(具有父类别到子类别层次结构的树状结构)
---------------------- category_id parent_id ---------------------- 1个空 2 空 3 1 4 1 5 2 6 2 ----------------------注意类别 3 是 1 的子项,5 是 2 的子项,依此类推......
表 2:object_category_map(将 object_id 与 object_category 表的 category_id 映射的表)
---------------------- object_id category_id ---------------------- 23 1 23 4 23 6 24 2 24 5 ----------------------任务是找到没有为category_id映射parent_id的object_id。
示例 1: object_id: 24, category_id : 2, 5 在表 2 中,object_id 24 关联了 category_id 5,并且 parent_id 为 5 它是 2,
示例 2: object_id:23,category_id:1、4、6 object_id 23 错过了 category_id 6 的 parent_id(2)。
任务是从table2中找到23,即object_id(s)列表,类似于23。
请帮助解决这个问题。谢谢。
【问题讨论】:
-
首先,您要实现的是节点层次概念,在这里您可以使用固定级别的 JOIN,例如父级的级别最高为 2,因此您最多可以进行 3 次连接,但是什么如果父母的等级不断增加?因此,为此,您必须遍历节点层次结构,直到将 parent_id 设置为 NULL。为此,您需要编程工作 + SQL 查询工作并使用递归函数,直到您收到 parent_id 为 NULL。你用的是什么语言,所以我可以指出正确的例子
-
我正在使用 PHP 和 Mysql