代码之家  ›  专栏  ›  技术社区  ›  Stephen Fuhry Bobby

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

  •  4
  • Stephen Fuhry Bobby  · 技术社区  · 14 年前

    我试过使用嵌套集,当处理多个树和许多其他复杂的问题时,它们变得很难维护。。我想尝试一下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 |
    +------------+------------+-----------+----------+---------+
    

    编辑: @戈登我想有很多方法可以得到结果集。。理想情况下,我希望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、RecursiveIterator等来提出一个干净的、可伸缩的解决方案来聚合层次数据。

    :结束编辑

    1 回复  |  直到 14 年前
        1
  •  0
  •   scaryzet    14 年前

    您真正想要的是:更好、更短的php代码还是更优化、更快的请求?如果您的情况是后一种情况,您应该真正研究嵌套集,因为它们允许通过单个SQL请求对树执行常规操作(选择所有子体、移动分支等)。

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