我正在使用mysql和php,并在mysql中创建了一个Parent Child表。 每位家长都有3个孩子。每个孩子也成为父母,也有3个孩子,依此类推。
现在我需要编写一个函数,它给我树中的最后一个父项(取决于所选的父ID),它没有3个Childs。因此,下一个Child订阅可以专用于该父订阅。
可以使用mysql查询或函数吗?
谢谢, 中号
我使用以下查询:
SELECT t1.uid, t2.pid FROM cms_users AS t1 LEFT JOIN cms_users AS t2 ON t1.uid = t2.pid
给出了以下输出:
t1.uid t2.pid
1 1
1 1
1 1
2 2
2 2
2 2
3 3
4 NULL
5 NULL
我实际需要的是如下结果:
p1.uid p2.pid
1 3
2 3
3 1
4 0
5 0
此结果也从根Parent 1开始 我需要从三个中选定的uid开始得到结果。 每个父母都有自己的树,从他的uid开始。 可能我需要编写存储过程或其他东西,但这对我来说都是新的,我不知道该怎么做。
这是树的外观示例。 http://www.musafreaks.com/images/tree.jpg 用户ID 1有自己的树,即使用户2,3和4也有自己的树,依此类推。
答案 0 :(得分:2)
在MySQL中解决这个问题并非易事。 manual中描述了管理分层数据的多种策略。我的其余部分是基于这篇文章。
您的设置类似于“邻接列表模型”,因此您可以针对数据集调整LEFT JOIN
解决方案。
SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;
这假设根节点的parent
字段为null
。您可能的新父母将被选为t1
。请注意,此查询将返回所有具有无子节点的节点,如果要“填充”具有三个子节点的每个节点,则必须稍微扩展查询。