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

问题描述 投票:0回答:1

我有以下架构(简化):

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

如何列出父ID的子名称?

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

mysql sql database relational-database parent-child
1个回答
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。输出将包含此父级的所有子级及其名称。

© www.soinside.com 2019 - 2024. All rights reserved.