我在做一个有亲子关系的小网络应用。问题是这种关系是递归的,而不仅仅是一个层次。
比如说:
鲍勃是彼得的父亲彼得是史蒂夫的父亲史蒂夫是查尔斯的父亲
实际上我在做一个 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获得给定用户的所有身份/后代?
谢谢你的阅读,请原谅我的英语不好。
暂无答案!
目前还没有任何答案,快来回答吧!