Comment puis-je agréger les résultats d'une liste de contiguïté utilisant le SPL de PHP
-
27-09-2019 - |
Question
Je l'ai essayé d'utiliser des ensembles imbriqués, et ils deviennent très difficiles à maintenir en traitant avec des arbres multiples et beaucoup d'autres complications .. Je voudrais donner la bibliothèque de SPL de PHP un coup de poignard à ce (BTW, nous sommes PHP 5.3 , MySQL 5.1).
Étant donné deux ensembles de données:
Les groupes:
+-------+--------+---------------------+---------------+
| 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 |
+-------+--------+---------------------+---------------+
Les éléments
+------------+------------+-----------+----------+---------+
| 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 |
+------------+------------+-----------+----------+---------+
Les chiffres sont en réalité beaucoup plus compliqué que cela (je suis en fait une quantité de concentration de variable de mois ou d'années au cours des dernières 15ans, donc il faudra peut-être 20 colonnes de résultats agrégés).
EDIT: @Gordon Je suppose qu'il ya plusieurs façons de s'y prendre pour obtenir le .. Idéalement resultset, je voudrais les trucs RecursiveIterator me donner quelque chose que je pourrais cracher dans une vue que aurait toute la logique métier (agrégation des nœuds feuilles, etc) déjà fait .. donc le résultat ressemblerait à quelque chose comme ceci (notez que la profondeur dans une liste de contiguïté est arbitraire):
+------------+------------+-----------+----------+---------+
| 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)
+------------+------------+-----------+----------+---------+
: FIN EDIT
J'ai essayé de trouver RecursiveIterator et
La solution Que voulez-vous vraiment: plus agréable et le code plus court php ou plusieurs demandes optimisées et rapides? Si votre cas est celui-ci, vous devriez vraiment regarder dans les ensembles imbriqués, car ils permettent le fonctionnement général sur un arbre (sélectionner tous les descendants, branche de déplacement, etc.) à faire par une seule requête SQL. Pour des exemples concrets de mise en œuvre essayer Google pour la proposition « Zend_Db_NestedSet ». Il a le soutien de « multi-racines » des arbres, de sorte que vous pouvez théoriquement utiliser une table pour maintenir les relations hiérarchiques génériques pour les différentes collections de données.