كيف يمكنني تجميع النتائج من قائمة متاخمة باستخدام PHP's SPL

StackOverflow https://stackoverflow.com/questions/2653593

سؤال

لقد حاولت استخدام مجموعات متداخلة ، وتصبح من الصعب للغاية الحفاظ عليها عند التعامل مع العديد من الأشجار والكثير من المضاعفات الأخرى .. أود أن أعطي مكتبة 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". لديها دعم للأشجار "متعددة الجذر" ، بحيث يمكنك من الناحية النظرية استخدام جدول واحد للحفاظ على العلاقات الهرمية العامة لمجموعات مختلفة من البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top