Pergunta

Eu tentei usar conjuntos aninhados e eles se tornam muito difíceis de manter ao lidar com várias árvores e muitas outras complicações. Gostaria de dar uma facada à biblioteca SPL do PHP nisso (BTW, somos Php 5.3, MySQL 5.1 ).

Dado dois conjuntos de dados:

Os grupos:

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

Os itens

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

Os números são realmente muito mais complicados do que isso (na verdade estou agregando uma quantidade variável de meses ou anos nos últimos 15 anos; portanto, pode haver 20 colunas de resultados agregados).

EDITAR: @Gordon Suponho que existem várias maneiras de fazer o resultado do Results. , etc) já feito .. então o resultado seria algo assim (observe que a profundidade em uma lista de adjacência é arbitrária):

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

Eu tenho tentado descobrir RecursiveIterator e IteratorAggregate, mas estou tendo dificuldade em encontrar exemplos do mundo real que sejam genéricos o suficiente para realmente entender essas aulas.

Alguém pode me dar uma vantagem?

EDITAR:

Uma solução altamente detalhada não é necessária aqui. Parece não estar claro onde (se houver), eu posso utilizar o iterador, o recursivo,, o recursiveeratorIterator, etc. para criar uma solução limpa e escalável para agregar dados hierárquicos.

: End Edit

Foi útil?

Solução

O que você realmente quer: código PHP mais agradável e mais curto ou solicitações mais otimizadas e rápidas? Se o seu caso for o último, você realmente deve procurar conjuntos aninhados, pois eles permitem que operações gerais em uma árvore (selecione todos os descendentes, mover ramo etc.) a serem feitos por uma única solicitação SQL.

Para exemplos concretos de implementação, tente o Google para a proposta "zend_db_nestetset". Possui suporte para árvores de "raiz múltipla", para que você possa teoricamente usar uma tabela para manter as relações hierárquicas genéricas para diferentes coleções de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top