我正在使用 mysql 和 php,并在 mysql 中创建了一个父子表。 每个 parent 都有 3 个 child 。每个 child 也成为 parent ,并且还有 3 个 child ,依此类推。
现在我需要编写一个函数,为我提供树中没有 3 个子节点的最后一个父节点(取决于所选的父节点 ID)。因此,下一个子订阅可以专用于该父订阅。
这可以用 mysql 查询或函数来完成吗?
谢谢, 中号
我使用以下查询:
SELECT t1.uid, t2.pid FROM cms_users AS t1 LEFT JOIN cms_users AS t2 ON t1.uid = t2.pid
这为 mr 提供了以下输出:
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 开始获取结果。 每个 parent 都有自己的树,从他的 uid 开始。 可能我需要编写一个存储过程或其他东西,但这对我来说都是新的,我不知道该怎么做。
这是树的外观示例。 http://www.musafreaks.com/images/tree.jpg 用户 ID 1 有自己的树,甚至用户 2、3 和 4 也有自己的树,依此类推。
最佳答案
这个问题在 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
。您可能的新 parent 将被选为 t1
。请注意,此查询将返回所有没有子节点的节点,如果您想用三个子节点“填充”每个节点,则必须稍微扩展查询。
关于php - MySQL 查询父子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4525920/