如何获取树数据库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 上看到一些涉及 WITH
和 UNION 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);
要使用 abovr 查询,只需将其复制到 Workbench(或您使用 MySQL 的任何工具),然后将您想要的 parent_user_id
分配给会话变量@pv
。输出将包含此 parent 的所有 children 及其名称。
我有以下架构(已简化):
users (id, pwd)
users_data (id, user_id, name)
users_parent (parent_user_id, children_user_id)
如何列出给定 parent id 的 child 个名字?
我在 Google 上看到一些涉及 WITH
和 UNION 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);
要使用 abovr 查询,只需将其复制到 Workbench(或您使用 MySQL 的任何工具),然后将您想要的 parent_user_id
分配给会话变量@pv
。输出将包含此 parent 的所有 children 及其名称。