MYSQL SELECT LOOP动态

时间:2014-06-09 16:57:37

标签: mysql loops subquery

我是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

2 个答案:

答案 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字段值落在根节点的leftright值之间的所有行。此方法的主要缺点是,在从树中添加或删除节点时,平均需要更新表中50%的记录。如果你有一张大桌子,那可能会有点性能。

不幸的是,据我所知,MySQL并没有办法执行递归查询,这将是解决这个问题的另一种方法。这个功能的其他一些数据库系统,但不是MySQL。