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

时间:2018-01-17 05:54:37

标签: mysql database parent-child common-table-expression database-relations

我正在制作一个有父/子关系的小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获取给予用户的所有后代/后代?

感谢阅读,请原谅我糟糕的英语。

0 个答案:

没有答案
相关问题