php - MySQL 查询父子

标签 php mysql parent-child parent

我正在使用 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/

相关文章:

php - 使用php将文件从其他站点下载到Web服务器

mysql - 多级Combox-MySQL查询

php - 限制从数据库返回的结果

Angular:将模板传递给子组件的最佳/推荐方式

java - 具有相同类的父子的 JPA 映射

子进程可以更改父进程共享的静态变量吗?

javascript - 获取选定的单选按钮和隐藏值

php - 寻找一个不是用PHP编写的“下一代” CMS,或者是Wordpress的更好替代方案。

php - 如何在 Laravel Form Facade 中使用关系值?

php - 分离从 mysqli_fetch_array 返回的两个数组