البرمجة

توليد JSON متداخل باستخدام دوال MySQL 5.7.12

في مواجهة تحدي استخدام الدوال الجديدة لل JSON في قاعدة البيانات MySQL نسخة 5.7.12 لتوليد كائنات JSON متداخلة، يظهر أنك تواجه تحدياً في فهم النمط الصحيح لتحقيق ذلك. دعني أساعدك في فهم الطريقة الصحيحة لتحقيق هذا الهدف.

في MySQL 5.7.12، ليس لديك القدرة على استخدام تلك الدوال الجديدة التي تدعم توليد JSON متداخل، لكن يمكنك استخدام مجموعة من الدوال الأساسية لتحقيق الهدف المطلوب. يمكن تحقيق ذلك باستخدام JSON_OBJECT لإنشاء كائن JSON لكل سجل رئيسي، ومن ثم استخدام JSON_ARRAYAGG لتجميع هذه الكائنات في مصفوفة JSON.

إليك استعلامٌ يحقق ما تريد:

sql
SELECT JSON_ARRAYAGG( JSON_OBJECT( 'id', pt.id, 'desc', pt.`desc`, 'child_objects', JSON_ARRAYAGG( JSON_OBJECT( 'id', ct.id, 'parent_id', ct.parent_id, 'desc', ct.`desc` ) ) ) ) AS result FROM parent_table pt LEFT JOIN child_table ct ON pt.id = ct.parent_id GROUP BY pt.id, pt.`desc`;

في هذا الاستعلام، يتم استخدام JSON_ARRAYAGG لتجميع الصفوف في مصفوفة JSON، ويتم استخدام LEFT JOIN للانضمام بين الجداول. هذا ينشئ نفس الشكل المطلوب من النتائج، حيث يتم تجميع الأشياء الفرعية في مصفوفة داخل الكائن الرئيسي.

اتمنى أن يكون هذا الشرح والاستعلام قد قدما لك الفهم الكافي لتحقيق الهدف المطلوب.

المزيد من المعلومات

بالطبع، سأقدم لك المزيد من المعلومات لتعزيز فهمك حول كيفية إنشاء كائنات JSON متداخلة باستخدام الدوال المتاحة في MySQL 5.7.12.

للبداية، يقوم الاستعلام بفصل العمليات إلى جزئين رئيسيين:

  1. الجزء الرئيسي للكائن الرئيسي (parent_object):

    • يتم استخدام JSON_OBJECT لإنشاء كائن JSON يمثل السجل الرئيسي من parent_table.
    • الخصائص الرئيسية هي ‘id’ و ‘desc’ و ‘child_objects’.
  2. الجزء الفرعي للكائنات الفرعية (child_objects):

    • يستخدم JSON_ARRAYAGG لتجميع كائنات JSON التي تمثل السجلات الفرعية من child_table.
    • يتم استخدام JSON_OBJECT داخل JSON_ARRAYAGG لإنشاء كائن JSON لكل سجل فرعي.
    • الخصائص الرئيسية هي ‘id’ و ‘parent_id’ و ‘desc’.

ثم، يتم استخدام JSON_ARRAYAGG مرة أخرى في الجزء الرئيسي لتجميع كل كائن رئيسي في مصفوفة JSON واحدة.

هذه الطريقة تضمن الحصول على نتائج مرتبة ومنظمة بشكل جيد، وتوفر هيكل JSON متداخل يعكس العلاقة الواضحة بين السجلات الرئيسية والفرعية.

أتمنى أن يكون هذا الشرح قد وفر لك فهمًا أعمق حول كيفية تحقيق هذه المهمة في MySQL 5.7.12. في حالة وجود أي أسئلة إضافية، فلا تتردد في طرحها.

زر الذهاب إلى الأعلى