MySQL查询父子

时间:2010-12-24 10:59:04

标签: php mysql parent-child parent

我正在使用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也有自己的树,依此类推。

1 个答案:

答案 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。请注意,此查询将返回所有具有子节点的节点,如果要“填充”具有三个子节点的每个节点,则必须稍微扩展查询。