سؤال

بعد أن قمت بتطبيع كافة البيانات الخاصة بي، أواجه مشكلة في دمج صفوف 3NF في صف واحد للإخراج.حتى الآن كنت أفعل ذلك من خلال الترميز من جانب الخادم، ولكن لأسباب مختلفة أحتاج الآن إلى تحديد جميع الصفوف المرتبطة بصف آخر، ودمجها في صف واحد، كل ذلك في MySQL...

لذا لمحاولة الشرح:

لدي ثلاث جداول

  • فئات
  • مقالات
  • فئة المقالات_3NF

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

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

إذا كان هذا يبدو وكأنه طلب سخيف، فهو كذلك.أنا فقط أستخدم المقالات كوسيلة جيدة لوصف المشكلة.بياناتي في الواقع مختلفة إلى حد ما.

على أي حال - الطريقة الوحيدة التي يمكنني رؤيتها لتحقيق ذلك هي استخدام ""GROUP_CONCATعبارة لتجميع حقول المحتوى معًا - المشكلة في ذلك هي أن هناك حدًا لمقدار البيانات التي يمكن أن يعود بها هذا، وأحتاجها حتى أتمكن من التعامل مع المزيد بشكل ملحوظ.

هل يمكن لأحد أن يقل لي كيف أعمل هذا؟

شكرًا.

هل كانت مفيدة؟

المحلول

يبدو هذا وكأنه شيء يجب القيام به في الواجهة الأمامية دون مزيد من المعلومات.

إذا كنت بحاجة إلى ذلك، يمكنك زيادة الحد الأقصى لحجم GROUP_CONCAT عن طريق تعيين متغير النظام group_concat_max_len.ولها حد على أساس max_allowed_packet, ، والتي يمكنك أيضًا زيادتها.أعتقد أن الحد الأقصى لحجم الحزمة هو 1 جيجابايت.إذا كنت بحاجة إلى الذهاب إلى مستوى أعلى من ذلك، فهناك بعض العيوب الخطيرة في تصميمك.

يحرر:بحيث يكون هذا في الجواب وليس فقط في التعليقات ...

إذا كنت لا ترغب في تغيير group_concat_max_len على مستوى العالم، يمكنك تغييره لجلستك فقط باستخدام:

SET SESSION group_concat_max_len = <your value here>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top