如何在树数据库表模型中获取子信息?

时间:2017-12-29 05:46:55

标签: mysql sql database relational-database parent-child

我有以下架构(简化):

users (id, pwd)
users_data (id, user_id, name)
users_parent (parent_user_id, children_user_id)

如何列出给定父ID的子名?

我在Google上看到一些涉及WITHUNION ALL的查询,但这句话对我来说有点新鲜。

1 个答案:

答案 0 :(得分:2)

假设层次结构只是父级的一个级别和子级的一个级别,我们可以尝试:

SELECT ud.name
FROM users_parent up
INNER JOIN users_data ud
    ON up.children_user_id = ud.user_id
WHERE
    up.parent_user_id = <some value>;

修改:基于this SO question我设法将一个应该适用于您的架构的分层查询拼凑在一起:

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);

Demo

要使用abovr查询,只需将其复制到Workbench(或与MySQL一起使用的任何工具),然后将所需的parent_user_id分配给会话变量@pv。输出将包含来自此父级的所有子级及其名称。