كيف يمكنني تجميع النتائج من قائمة متاخمة باستخدام PHP's SPL
-
27-09-2019 - |
سؤال
لقد حاولت استخدام مجموعات متداخلة ، وتصبح من الصعب للغاية الحفاظ عليها عند التعامل مع العديد من الأشجار والكثير من المضاعفات الأخرى .. أود أن أعطي مكتبة PHP SPL طعنة في هذا (راجع للشغل ، نحن PHP 5.3 ، MySQL 5.1 ).
إعطاء مجموعتين بيانات:
المجموعات:
+-------+--------+---------------------+---------------+
| 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 |
+-------+--------+---------------------+---------------+
العناصر
+------------+------------+-----------+----------+---------+
| 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 |
+------------+------------+-----------+----------+---------+
هذه الأرقام في الواقع أكثر تعقيدًا من هذا (أقوم بالفعل بتجميع قدر متغير من أشهر أو سنوات على مدار الخمسة عشر عامًا الماضية ، لذلك قد يكون هناك 20 عمودًا من النتائج المجمعة).
تعديل: gordon أفترض أن هناك عدد من الطرق للاستمتاع بالحصول على نتائج النتيجة .. من الناحية المثالية ، أود أن تعطيني الأشياء المتكررة لشيء يمكنني أن أبصق في وجهة نظر من شأنها أن تحتوي على كل منطق العمل (تجميع عقد الأوراق ، إلخ) تم القيام به بالفعل .. لذا فإن النتيجة ستبدو شيئًا من هذا القبيل (لاحظ أن العمق في قائمة المجاورة تعسفية):
+------------+------------+-----------+----------+---------+
| 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)
+------------+------------+-----------+----------+---------+
: نهاية التحرير
لقد كنت أحاول معرفة ذلك متكرر و iteratoraggregate, ، لكنني أواجه صعوبة في العثور على أمثلة في العالم الحقيقي والتي تكون عامة بما يكفي لالتفاف رأسي حول هذه الفصول.
هل يمكن لأحد أن يعطيني بداية؟
تعديل:
ليس هناك حاجة إلى حل مفصل للغاية هنا .. يبدو أنه من غير الواضح أين (إن وجد) (على الإطلاق) ، قد أستخدم التكرار ، المتكرر ، المتكرر ، وما إلى ذلك للتوصل إلى حل نظيف وقابل للتطوير لتجميع البيانات الهرمية.
: نهاية التحرير
المحلول
ماذا تريد حقًا: رمز PHP أجمل وأقصر أو طلبات أكثر تحسناً وسريعًا؟ إذا كانت قضيتك هي الأخيرة ، فيجب أن تنظر حقًا إلى مجموعات متداخلة لأنها تسمح للعمليات العامة على شجرة (حدد جميع أحفاد النسل ، وفرع نقل ، وما إلى ذلك) ليتم ذلك بطلب SQL واحد.
للحصول على أمثلة ملموسة للتنفيذ ، جرب Google للحصول على اقتراح "Zend_DB_NTESTERSET". لديها دعم للأشجار "متعددة الجذر" ، بحيث يمكنك من الناحية النظرية استخدام جدول واحد للحفاظ على العلاقات الهرمية العامة لمجموعات مختلفة من البيانات.