我有一个基于MySQL的表中的树表示id,depth,parent_id和path.此表中的每个根记录都具有深度0,parent_id != null并且path基于左侧填充的ID的十六进制值表示0.
树的每个元素都是通过指定,(伪代码)构造的depth = parent.depth + 1,例如:path = parent.path + hex(id)parent_id = parent.id
id path depth parent_id assigned_user_id
------------------------------------------------------------
1 001 0 NULL NULL
2 002 0 NULL 1
3 001003 1 1 2
4 002004 1 2 1
5 001003005 2 3 2
6 001003005006 3 5 2
7 002004007 2 4 1
8 002004008 2 4 2
9 002004009 2 4 2
10 00200400800A 3 8 2
Run Code Online (Sandbox Code Playgroud)
等等...问题是如何将特定用户ID的记录限制在同一分支中的最短路径.例如,对于assigned_user_id = 2retrive:
id path depth parent_id assigned_user_id
------------------------------------------------------------
3 001003 1 1 2
8 002004008 2 4 2
9 002004009 2 4 2
Run Code Online (Sandbox Code Playgroud)
代替:
id path depth parent_id assigned_user_id
------------------------------------------------------------
3 001003 1 1 2
5 001003005 2 3 2
6 001003005006 3 5 2
8 002004008 2 4 2
9 002004009 2 4 2
10 00200400800A 3 8 2
Run Code Online (Sandbox Code Playgroud)
SELECT t1.*
FROM atable t1
LEFT JOIN atable t2
ON t2.assigned_user_id = t1.assigned_user_id AND
t2.path = LEFT(t1.path, CHAR_LENGTH(t2.path)) AND
t2.id <> t1.id
WHERE t1.assigned_user_id = 2
AND t2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |