حدد mysql - كيفية استرداد نتيجة للرسائل المترابطة/المتداخلة؟

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

سؤال

أقوم بإنشاء لوحة رسائل مترابطة وأحاول أن أبقيها بسيطة.يوجد جدول رسائل، ثم جدول ردود يحتوي على حقل "reply_id" الذي يمكن أن يكون فارغًا للإشارة إلى استجابة المستوى الأعلى، أو قيمة تشير إلى استجابة مترابطة.

أنا في حيرة من أمري بشأن كيفية إجراء مكالمة SELECT على هذا النوع من الجداول؟

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

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

شكرًا...

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

المحلول

أنت تستخدم طريقة "الكتاب المدرسي" الساذجة لتخزين الأشجار، أي.تخزين إشارة إلى الوالد المباشر.ويسمى هذا التصميم قائمة المجاورة.هناك حلول أخرى:

  • تعداد المسار, حيث تخزن في كل عقدة من الشجرة سلسلة تشفر جميع أسلافها المباشرين.
  • مجموعات متداخلة, ، وهو نهج ذكي من جو سيلكو حيث تستخدم قيمتين رقميتين لكل عقدة لربط جميع أحفادها.
  • جدول الإغلاق (أو علاقة الجوار)، حيث تستخدم جدولًا منفصلاً لسرد كل زوج من سلالات السلف.

راجع ردي على "ما هي الطريقة الأكثر كفاءة/أناقة لتحليل طاولة مسطحة إلى شجرة؟"للحصول على مراجع وأمثلة لتصميم الجدول الختامي.

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