有一张树 状 结 构的表TREE。见下面的树状构造图。 | |||||
id | parentid | childid | |||
1001 | root | 父节 点 | |||
1002 | 父节 点 | 儿子节 点1 | |||
1003 | 父节点 | 儿子节 点2 | |||
1004 | 儿子节 点2 | 孙子节点1 | |||
・・・ | ・・・ | ・・・ | |||
有一张 用 户 和 树节 点的关 联 表RELATION。 | |||||
id | userid | TREE.id | start_date | end_date | … |
1 | 用户 A | 1002 | 2009/10/1 | 2010/10/1 | … |
2 | 用户 B | 1003 | 2009/10/1 | 2010/10/1 | … |
3 | 用户 C | 1004 | 2009/10/1 | 2010/10/1 | … |
4 | 用户 D | 玄孙节点3 | 2009/10/1 | 2010/10/1 | … |
5 | 用户 D | 1001 | |||
・・・ | ・・・ | ・・・ | ・・・ | ・・・ | … |
这张表不是所有用户都有对应的数据。一个用户可以对应多条数据。 | |||||
要求取出RELATION表的以下数据 | |||||
user_id | start_date | end_date | |||
条件: | |||||
①有一个变量是指定要操作树的哪个节点。比如是儿子节点2. | |||||
②如果用户 有指定 节 点的RELATION数据, 这 个用 户 查 询 成功。如果没有 继续 ③ | |||||
③向上 查找最近的父 亲节点是否有RELATION对应数据。(因为一个用户可能有多条数据,只要最近的那条数据) | |||||
如果有则 查 询 成功。 | |||||
如果没有继续 ④ | |||||
④向下查找所有孩子 节点中是否存在RELATION对应数据。 | |||||
如果有则 查 询 成功。但 这个时候要求 start_date和end_date 输出为空白。 | |||||
如果没有,则这个用户的数据不出现在结果里。 | |||||
如果是你,你在多长时间内写出SQL。并且SQL效率较高。 |
树状构造图: