Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP';s SPL_Php_Mysql_Aggregation_Spl_Adjacency List - Fatal编程技术网

如何使用PHP';s SPL

如何使用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 | +-------+--------+---------------------+----

我尝试过使用嵌套集,当处理多棵树和许多其他复杂情况时,它们变得很难维护。。我想尝试一下PHP的SPL库(顺便说一句,我们是PHP5.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的东西能给我一些东西,我可以把它放到一个视图中,这个视图已经完成了所有的业务逻辑(叶节点的聚合等)。。结果如下(注意,邻接列表中的深度是任意的):

:结束编辑

我一直在试图找出和,但我很难找到真实世界的例子,这些例子足够通用,足以让我的头脑真正围绕这些类

谁能给我一个领先的机会

编辑:

+-------+--------+---------------------+---------------+
| 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请求。。我想检索整个树一次,然后尽可能优雅地将其构建到一个数组中。