Pregunta

He intentado usar sets anidados, y se vuelven muy difíciles de mantener cuando se trata de múltiples árboles y muchas otras complicaciones. Me gustaría darle una puñalada a la biblioteca SPL de PHP (por cierto, somos PHP 5.3, MySQL 5.1 ).

Dados dos conjuntos de datos:

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

Los artículos

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

Las cifras en realidad son mucho más complicadas que esto (en realidad estoy agregando una cantidad variable de meses o años en los últimos 15 años, por lo que es posible que deba haber 20 columnas de resultados agregados).

EDITAR: @Gordon Supongo que hay varias maneras de obtener el resultado de los resultados. Idealmente, me gustaría que las cosas recursivas de subyacentes me dieran algo que podría escupir en una vista que tendría toda la lógica comercial (agregación de nodos de hoja , etc) ya hecho ... así que el resultado se vería algo así (tenga en cuenta que la profundidad en una lista de adyacencia es 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)
+------------+------------+-----------+----------+---------+

: END EDITAR

He estado tratando de averiguar Recursivoiteriterador y Iteratorggregate, pero estoy teniendo dificultades para encontrar ejemplos del mundo real que sean lo suficientemente genéricos como para entender realmente estas clases.

¿Alguien puede darme una ventaja?

EDITAR:

No se necesita una solución altamente detallada aquí. Simplemente no parece estar claro dónde (si es que lo hace) podría utilizar iterador, recursiveIterator, recursiveIteratorIterator, etc. para encontrar una solución limpia y escalable para agregar datos jerárquicos.

: END EDITAR

¿Fue útil?

Solución

¿Qué quieres realmente: código PHP más corto y más corto o solicitudes más optimizadas y rápidas? Si su caso es este último, realmente debe buscar conjuntos anidados, ya que permiten operaciones generales en un árbol (seleccione todos los descendientes, mueva la rama, etc.) que se realicen una sola solicitud SQL.

Para ejemplos concretos de implementación, pruebe Google para la propuesta "Zend_DB_NestedSet". Tiene soporte para árboles "múltiples", por lo que en teoría puede usar una tabla para mantener relaciones jerárquicas genéricas para diferentes colecciones de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top