如何使用PHP';s SPL
我尝试过使用嵌套集,当处理多棵树和许多其他复杂情况时,它们变得很难维护。。我想尝试一下PHP的SPL库(顺便说一句,我们是PHP5.3,MySQL 5.1) 给定两个数据集: 小组:如何使用PHP';s SPL,php,mysql,aggregation,spl,adjacency-list,Php,Mysql,Aggregation,Spl,Adjacency List,我尝试过使用嵌套集,当处理多棵树和许多其他复杂情况时,它们变得很难维护。。我想尝试一下PHP的SPL库(顺便说一句,我们是PHP5.3,MySQL 5.1) 给定两个数据集: 小组: +-------+--------+---------------------+---------------+ | id | parent | Category Name | child_key | +-------+--------+---------------------+----
+-------+--------+---------------------+---------------+
| id | parent | Category Name | child_key |
+-------+--------+---------------------+---------------+
| 11133 | 7707 | Really Cool Products| 47054 |
| 7709 | 7708 | 24" Monitors | 57910 |
| 7713 | 7710 | Hot Tubs | 35585 |
| 7716 | 7710 | Hot Dogs | 00395 |
| 11133 | 7707 | Really Cool Products| 66647 |
| 7715 | 7710 | Suction Cups | 08396 |
+-------+--------+---------------------+---------------+
项目
+------------+------------+-----------+----------+---------+
| child_key | totalprice | totalcost | totalqty | onorder | (jan, feb, mar..)
+------------+------------+-----------+----------+---------+
| 24171 | 10.50 | 20.10 | 200 | 100 |
| 35685 | 10.50 | 20.10 | 200 | 100 |
| 76505 | 10.50 | 20.10 | 200 | 100 |
| 04365 | 10.50 | 20.10 | 200 | 100 |
| 01975 | 10.50 | 20.10 | 200 | 100 |
| 12150 | 10.50 | 20.10 | 200 | 100 |
| 40060 | 10.50 | 20.10 | 200 | 100 |
| 08396 | 10.50 | 20.10 | 200 | 100 |
+------------+------------+-----------+----------+---------+
这些数字实际上要比这复杂得多(我实际上是将过去15年中的月数或年数进行聚合,因此可能需要20列聚合结果)
编辑:@Gordon我想有很多方法可以获得结果集。。理想情况下,我希望RecursiveIterator的东西能给我一些东西,我可以把它放到一个视图中,这个视图已经完成了所有的业务逻辑(叶节点的聚合等)。。结果如下(注意,邻接列表中的深度是任意的):
:结束编辑
我一直在试图找出和,但我很难找到真实世界的例子,这些例子足够通用,足以让我的头脑真正围绕这些类
谁能给我一个领先的机会
编辑:
+-------+--------+---------------------+---------------+
| id | parent | Category Name | child_key |
+-------+--------+---------------------+---------------+
| 11133 | 7707 | Really Cool Products| 47054 |
| 7709 | 7708 | 24" Monitors | 57910 |
| 7713 | 7710 | Hot Tubs | 35585 |
| 7716 | 7710 | Hot Dogs | 00395 |
| 11133 | 7707 | Really Cool Products| 66647 |
| 7715 | 7710 | Suction Cups | 08396 |
+-------+--------+---------------------+---------------+
这里不需要非常详细的解决方案。。似乎不清楚我在哪里(如果有的话)可以利用迭代器、递归迭代器、递归迭代器等来提出一个干净的、可伸缩的解决方案来聚合分层数据
:结束编辑您真正想要的是什么:更好、更短的php代码还是更优化、更快的请求?如果您的情况是后一种情况,那么您应该真正研究嵌套集,因为它们允许通过单个SQL请求对树执行常规操作(选择所有子体、移动分支等)
关于具体的实施示例,请尝试谷歌的“Zend_Db_NestedSet”方案。它支持“多根”树,因此理论上,您可以使用一个表来为不同的数据集合保留通用的层次关系。(相关)(建议)您可能需要添加一个示例结果集以获得清晰性。@Gordon感谢您的回复,我添加了一个所需的结果集。是的,但不幸的是,Zend_Db_NestedSet并不存在——这只是一个提议,哈哈。实际上,我现在使用的是邻接列表和嵌套集的组合,问题是可维护性。老实说,性能不是问题——在我的特定情况下,嵌套集可能(并且已经)出现太多问题。。条令有一个优秀的嵌套集处理程序。。不幸的是,目前这还不是一个选项。我想要的是可维护的php代码和少量(非递归)db请求。。我想检索整个树一次,然后尽可能优雅地将其构建到一个数组中。