首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP的SPL聚合邻接列表的结果

如何使用PHP的SPL聚合邻接列表的结果
EN

Stack Overflow用户
提问于 2010-04-16 14:19:38
回答 1查看 687关注 0票数 4

我尝试过使用嵌套集,当处理多棵树和许多其他复杂问题时,它们变得非常难以维护。我想尝试一下PHP的SPL库(顺便说一句,我们是PHP5.3,MySQL 5.1)。

给定两个数据集:

组:

代码语言:javascript
复制
+-------+--------+---------------------+---------------+
| 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         |
+-------+--------+---------------------+---------------+

项目

代码语言:javascript
复制
+------------+------------+-----------+----------+---------+
| 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可以给我一些东西,我可以把它吐到一个已经完成了所有业务逻辑(叶节点聚合等)的视图中。结果如下(请注意,邻接列表中的深度是任意的):

代码语言:javascript
复制
+------------+------------+-----------+----------+---------+
| 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)
+------------+------------+-----------+----------+---------+

:结束编辑

我一直在试图找出RecursiveIteratorIteratorAggregate,但是我很难找到足够通用的、足以让我对这些类感兴趣的真实世界示例。

有人能给我个先发制人吗?

编辑:

这里不需要一个非常详细的解决方案。似乎还不清楚我在哪里(如果有的话)可以使用Iterator、RecursiveIterator、RecursiveIteratorIterator等来提出一个干净的、可伸缩的解决方案来聚合分层数据。

:结束编辑

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-06 19:16:17

您真正想要的是:更好的、更短的php代码,还是更优化、更快速的请求?如果您的情况是后一种情况,那么您应该真正地查看嵌套集,因为它们允许对树进行一般操作(选择所有的后代,移动分支等等)。由单个SQL请求执行。

要获得具体的实现示例,请尝试google的"Zend_Db_NestedSet“建议。它支持“多根”树,因此理论上可以使用一个表来为不同的数据集合保留一般的层次关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2653593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档