MySQL树 - 让所有孩子

时间:2016-05-02 19:10:36

标签: php mysql recursion tree

我的namespace Day3Homework { class Spy { SpyForm form = new SpyForm(); //creating an instance of the SpyForm private string codeName; private Agency spyAgency; private DateTime dateLastSeen; private string notes; public string CodeName { get { return codeName; } set { codeName = value; } } public Agency SpyAgency { get { return spyAgency; } set { spyAgency = value; } } public DateTime DateLastSeen { get { return dateLastSeen; } set { dateLastSeen = DateTime.Parse(form.textBox5.Text); } } } 表如下所示:

MySQL

树的最大深度为10级。我试图通过指定id来获取所有子ID。目前,我使用循环遍历所有条目的递归| id | parentid | | 1 | 0 | | 2 | 0 | | 3 | 1 | | 4 | 3 | ... 函数,获取子项并再次循环遍历它们。但是这种方法很慢,所以我试图找到一种php方法。

我的第一次尝试是:

SQL

这个方法看起来很有希望尝试,但是我希望在php数组中让所有的子id不同。当我执行这个语句时,它非常快,但是我的php代码减慢了它的速度:

SELECT lvl0.id, lvl1.id, lvl2.id, lvl3.id ...
FROM tree lvl0
LEFT JOIN tree lvl1 ON lvl1.parentid = lvl0.id
LEFT JOIN tree lvl2 ON lvl2.parentid = lvl1.id
LEFT JOIN tree lvl3 ON lvl3.parentid = lvl2.id
...
WHERE lvl0.id = 3;

所以我尝试找到一个$ids = []; foreach($result as $row) { if(!in_array($row['lvl0.id'], $ids)) $ids[] = $row['lvl0.id']; if(!in_array($row['lvl1.id'], $ids)) $ids[] = $row['lvl1.id']; if(!in_array($row['lvl2.id'], $ids)) $ids[] = $row['lvl2.id']; if(!in_array($row['lvl3.id'], $ids)) $ids[] = $row['lvl3.id']; ... } 解决方案,也许是与SQL的组合,它允许我在一个数组中获取所有不同的子ID。

0 个答案:

没有答案