我的第一篇文章在这里!看来这是一个变得明智的地方;)
我目前正在进行一些测试,第一次尝试使用 MPTT(修改的预序树遍历)方法在 PHP 的帮助下将数据存储在 Mysql 数据库中。
但是,我试图找到最注重性能的方法来获取特定级别上的所有列表元素,并具有特定的父元素。
如果输入的家长名为“Bilar”,则可以转化为从下图中获取 Saab 和 Chrysler 类别。 (这在瑞典语中是“汽车”的意思,如果这不是你最强的一面;))
由于我无法发布图片,这里是流程图的链接:http://www.phpsidan.nu/files/mptt/mptt1.png http://www.phpsidan.nu/files/mptt/mptt1.png
目前,我一直在执行两个查询来执行我想要的操作,并使用相当多的代码来计算级别并吐出同一级别上的所有其他元素。
有没有更好的方法来做到这一点并且希望只使用一个查询?
多谢!
我确信这可以优化,但是假设您有“name”、“lft”和“rgt”列,下面将为您提供“Bilar”的 2 级同级。
SELECT node.name,
node.lft AS sort,
(COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM car AS node,
car AS parent,
car AS sub_parent,
( SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM car AS node,
car AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = "Bilar"
GROUP BY node.name
ORDER BY node.lft) AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.name = sub_tree.name
GROUP BY node.name HAVING depth <= 2
ORDER BY node.lft
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)