Nasıl PHP'nin SPL kullanarak bir komşuluk listeden sonuçları agrega yok

1 Cevap php

.. Ben PHP'nin SPL kütüphanesi bu bir bıçak (btw, biz PHP 5.3, MySQL 5.1 'vermek istiyorum iç içe setlerini kullanarak denedim, ve birden ağaçlar ve diğer komplikasyonlar sürü ile uğraşırken korumak için çok zor hale .)

Verilen iki veri seti:

The Groups:

+-------+--------+---------------------+---------------+
| 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         |
+-------+--------+---------------------+---------------+

The Items

+------------+------------+-----------+----------+---------+
| 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 |
+------------+------------+-----------+----------+---------+

Rakamlar (aslında son 15 yrs üzerinde ay veya yıl bir değişken miktarda toplayarak duyuyorum, bu yüzden toplu sonuçlar 20 sütun olması gerekebilir) aslında çok daha karmaşık bu daha vardır.

EDIT: Gordon @ ben .. İdeal olarak, ben bana bütün olurdu bir görünüm içine tükürmek bir şey vermek için RecursiveIterator şeyler istiyorum resultset alma hakkında gitmek için yollar vardır herhalde iş mantığı (yaprak düğümlerin toplama, vb) .. zaten bitmiş yüzden sonuç böyle bir şey (bir komşuluk listesinde derinliği keyfi olduğunu unutmayın) görünecektir:

+------------+------------+-----------+----------+---------+
| 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)
+------------+------------+-----------+----------+---------+

:END EDIT

I RecursiveIterator ve IteratorAggregate anlamaya çalışıyorlar, ama ben zor bir zaman gerçekten bu sınıfların etrafında başımı sarmak için yeterince genel olan gerçek dünya örnekleri bulma yaşıyorum.

Birisi bana bir başlangıç ​​verebilir misiniz?

EDIT:

Oldukça ayrıntılı bir çözüm burada gerekli değildir .. Bu, sadece belirsiz görünüyor nerede (hiç değilse) ben hiyerarşik verileri toplamak için temiz, ölçeklenebilir bir çözüm ile gelip yineleyici, vb RecursiveIterator, RecursiveIteratorIterator, kullanmak olabilir.

:END EDIT

1 Cevap

Gerçekten ne istiyorsun: güzel ve daha kısa php kod veya daha optimize ve hızlı istekleri? Sizin durumda ikincisi ise bir ağacın üzerinde genel işlemleri tek bir SQL isteği tarafından yapılacak (bütün soyunu seçimi, vb, şube taşımak) izin gibi, gerçekten iç içe kümeler içine bakmak gerekir.

Uygulanması somut örnekler için "Zend_Db_NestedSet" önerisi için google deneyin. Bu "multi-root" ağaçlar için desteği vardır, bu nedenle teorik olarak, farklı veri koleksiyonları için genel hiyerarşik ilişkiler tutmak için bir tablo kullanabilirsiniz.