我是mysql的新手,不知道是否可以在select中使用循环语句。
我的表:
ID user_id parent
1 13 2
2 14 2
3 15 13
4 16 13
5 17 14
6 18 14
7 19 15
8 20 15
值为2的父级没有父级。它就像root一样
user_id
相当于孩子
所以如果我这样做
SELECT * FROM my_table WHERE parent = 2
基本上输出是:
ID user_id parent
1 13 2
2 14 2
有没有办法可以让另一个孩子?我应该做子查询吗?如果选择2,则这是我想要实现的图像:http://awesomescreenshot.com/04b2y7qfe2
答案 0 :(得分:0)
以下是您如何将父母用户与其子女用户联系起来:
这将只显示包含父母的记录:
SELECT c.user_id, c.parent, p.user_id, p.parent
FROM my_table c, my_table p
WHERE c.parent = p.user_id
或者使用左连接,显示拥有或没有父项的记录(具有2作为parentID的记录)
SELECT c.user_id as ChildID, c.parent as ChildParentID, p.user_id as ParentID, p.parent as ParentOfParentID
FROM my_table c
LEFT JOIN my_table p
ON c.parent = p.user_id
答案 1 :(得分:0)
这看起来像通常称为邻接树列表,其中通过指定ID和父ID以列表形式定义树结构,其中给定的父ID值指示树的根节点(在这种情况下,价值2
)。
Amir的回答将为您提供每个节点的直接孩子。如果您想要从给定节点检索树的整个分支,您可以查看Modified Preorder Tree Traversal (MPTT)。您只需获取left
字段值落在根节点的left
和right
值之间的所有行。此方法的主要缺点是,在从树中添加或删除节点时,平均需要更新表中50%的记录。如果你有一张大桌子,那可能会有点性能。
不幸的是,据我所知,MySQL并没有办法执行递归查询,这将是解决这个问题的另一种方法。这个功能的其他一些数据库系统,但不是MySQL。