如何获取树数据库table模型中的child信息?

How to get child information in a tree database table model?

我有以下架构(已简化):

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

如何列出给定 parent id 的 child 个名字?

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

假设层级只有 parent 一级和 children 一级,我们可以尝试:

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。输出将包含此 parent 的所有 children 及其名称。