我正在制作一个有父/子关系的小webapp。问题是关系是递归的,不只是一个层次。
让我们说:
鲍勃是彼得的父亲 彼得是史蒂夫的父亲 史蒂夫是查尔斯的父亲实际上我正在做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);
我的表格如下:
users_parent(parent_user_id, children_user_id)
我对CTE完全不熟悉,如何使用CTE获取给予用户的所有后代/后代?
感谢阅读,请原谅我糟糕的英语。