我尝试过使用嵌套集,但在处理多棵树和许多其他复杂情况时,它们变得非常难以维护。我想在这方面给 PHP 的 SPL 库一个尝试(顺便说一句,我们是 PHP 5.3,MySQL 5.1 )。
给定两个数据集:
团体:
+-------+--------+---------------------+---------------+
| 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 的东西给我一些东西,我可以把它吐到一个包含所有业务逻辑的视图中(聚合叶节点等)已经完成..所以结果看起来像这样(注意邻接列表中的深度是任意的):
+------------+------------+-----------+----------+---------+
| Name | totalprice | totalcost | totalqty | onorder | (jan, feb, mar..)
+------------+------------+-----------+----------+---------+
| Monitors | 36.00 | 60.40 | 800 | 400 | (category)
| --24" | 22.00 | 40.20 | 400 | 200 | (category)
| ---04365 | 10.50 | 20.10 | 200 | 100 | (item)
| ---04366 | 11.50 | 20.10 | 200 | 100 | (item)
| --22" | 1.50 | 10.10 | 200 | 100 | (category)
| ---04365 | 1.50 | 10.10 | 200 | 100 | (item)
| -01234 | 12.50 | 10.10 | 200 | 100 | (item)
+------------+------------+-----------+----------+---------+
:结束编辑
我一直在试图弄清楚RecursiveIterator和IteratorAggregate,但是我很难找到足够通用的真实世界示例,以真正让我的头脑围绕这些类。
有人可以给我一个先机吗?
编辑:
这里不需要一个非常详细的解决方案。似乎不清楚我可以在哪里(如果有的话)利用 Iterator、RecursiveIterator、RecursiveIteratorIterator 等来提出一个干净、可扩展的解决方案来聚合分层数据。
:结束编辑