ネストされたセットを使用してみましたが、複数のツリーやその他の多くの問題を処理するときに、それらを維持するのが非常に困難になります。PHPのSPLライブラリにこれを試してみたいと思います(ところで、PHP 5.3、MySQL 5.1 )。
与えられた2つのデータセット:
グループ:
+-------+--------+---------------------+---------------+
| 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などをどこで利用できるかは不明です。
:編集終了