在父子树关系中使用公共表表达式(cte)

mkh04yzy  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(218)

我在做一个有亲子关系的小网络应用。问题是这种关系是递归的,而不仅仅是一个层次。
比如说:
鲍勃是彼得的父亲彼得是史蒂夫的父亲史蒂夫是查尔斯的父亲
实际上我在做一个 RIGHT JOIN 但很明显,我只能接触到一个刚出生的孩子。
这就是我想要实现的:
如果输入是 Steve 我希望得到 [Charles] 作为输出。
如果输入是 Peter 我希望得到 [Steve, Charles] 作为输出。
如果输入是 Bob 我希望得到 [Peter, Steve, Charles] 作为输出。
我读到cte非常适合这种情况,因为这样做很奇怪,有点疯狂(在我看来):

SELECT children_user_id, ud.name, parent_user_id 
FROM
((SELECT * FROM users_parent
  ORDER BY parent_user_id, children_user_id) parents_sorted,
 (SELECT @pv := '1') initialisation)
LEFT JOIN users_data ud
    ON parents_sorted.children_user_id = ud.user_id
WHERE
    FIND_IN_SET(parent_user_id, @pv) > 0 AND
    @pv := CONCAT(@pv, ',', children_user_id);

我的table看起来像: users_parent(parent_user_id, children_user_id) 我对cte完全陌生,如何使用cte获得给定用户的所有身份/后代?
谢谢你的阅读,请原谅我的英语不好。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题