Domanda

Ho provato a usare set nidificati e diventano molto difficili da mantenere quando si tratta di più alberi e molte altre complicazioni .. Vorrei dare una pugnalata alla biblioteca SP di PHP (btw, siamo PHP 5.3, MySQL 5.1 ).

Dai due set di dati:

I gruppi:

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

Gli oggetti

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

Le cifre sono in realtà molto più complicate di questo (in realtà sto aggregando una quantità variabile di mesi o anni negli ultimi 15 anni, quindi potrebbe essere necessario 20 colonne di risultati aggregati).

MODIFICARE: @Gordon Suppongo che ci siano diversi modi per ottenere il set di risultati. Idealmente, vorrei che le cose ricorsivitatoriessero mi darono qualcosa che potrei sputare in una visione che avrebbe tutta la logica aziendale (aggregazione dei nodi fogliari , ecc.) Fatto già .. quindi il risultato sembrerebbe qualcosa di simile (si noti che la profondità in un elenco di adiacenza è arbitraria):

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

: EDIT EDIT

Ho cercato di capire Ricorsiviteratore e IteratorAggregate, ma mi sto divertendo a trovare esempi nel mondo reale che sono abbastanza generici da avvolgere davvero la testa attorno a queste classi.

Qualcuno può darmi un vantaggio?

MODIFICARE:

Non è necessaria una soluzione altamente dettagliata qui. Sembra poco chiaro dove (se non del tutto) potrei utilizzare iteratore, ricorsiviteratore, ricorsiviterator, ecc. Per trovare una soluzione pulita e scalabile per aggregare dati gerarchici.

: EDIT EDIT

È stato utile?

Soluzione

Cosa vuoi veramente: codice PHP più bello e più corto o più richieste ottimizzate e veloci? Se il tuo caso è quest'ultimo, dovresti davvero esaminare i set nidificati in quanto consentono operazioni generali su un albero (seleziona tutti i discendenti, sposta il ramo, ecc.) Da eseguire da una singola richiesta SQL.

Per esempi concreti di implementazione, provare Google per la proposta "Zend_DB_NestedSet". Ha supporto per alberi "multi-root", quindi è possibile utilizzare teoricamente una tabella per mantenere relazioni gerarchiche generiche per diverse raccolte di dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top