ما هي أفضل طريقة لفصل المناقشات المتداخل على صفحات متعددة - لتطبيق الويب؟

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

سؤال

أقوم بتصميم عرض رسالة مترابطا لتطبيق PHP / MySQL - مثل التعليقات على Slashdot أو YouTube - وأتساءل كيف يجب أن أذهب حول طلب التعليقات وفصلها إلى صفحات حتى تتمكن من ذلك، قل 20 تعليقا على الصفحة ولكن لا يزال لديك متداخلة.

يمكن تغيير التعليقات في تطبيقي مستويات غير محدودة، ويتم تمثيل هذا الهيكل باستخدام ما أعتقده هو جدول علاقة مجاورة، وهو جدول منفصل يحتوي على صف لكل زوج له أي علاقة نضينية / ننسية. أن جدول العلاقة يحتوي على طفل رضيع، والباليه والمستوى حيث يعني المستوى 2 "غريبا"، وهلم جرا.

سؤالي هو واحد من سواء قابلية الاستخدام للمستخدم النهائي، وعملية بناء استفسار DB فعال. لقد نظرت في هذه الخيارات:

  • يؤدي تقسيم النتائج إلى صفحات حسب التاريخ، بغض النظر عن الموقف في الشجرة، بحيث تظهر جميع التعليقات في نطاق تاريخ معين معا حتى لو لم تظهر مع والديهم. يظهر أي تعليق تم نشره في وقت مماثل لأحدها في نفس الصفحة وفي تلك الحالات، يمكننا عرضها "متداخلة"، ولكن ستكون هناك تعليقات تيتم معديها من والديهم. ربما يكون هذا مقبولا - إنها الطريقة التي يتم بها أن تتم الأمور في تعليقات YouTube - أي تعليق قد يظهر في وقت لاحق بكثير من ووالديه لن يظهر على نفس الصفحة مثل الوالد الخاص به (إذا لم يكن الوالد على الصفحة الأخيرة)، ولكنه يظهر بدلا من ذلك أحدث التعليقات الأخرى.

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

  • الخيار الثالث هو القيام به مثل Slashdot، حيث لا يفصل تعليقات على صفحات، ولكن لديه شجرة كبيرة واحدة - من أجل الحفاظ على حجم الصفحة يمكن التحكم فيها بإعدام التعليقات ذات التصنيف المنخفض بدلا من ذلك.

أعتقد أن الأول سيكون أبسط استعلام DB مع إعطاء جدول علاقاتي ولكن سيكون مفتوحا للأفكار الأخرى.

بعض الأنظمة هذه، من بين جميع الأنواع الثلاثة، تحد من مستوى التعشيش بطريقة ما - وهذا سهل بما يكفي، بمجرد الضغط على مستويات X كل شيء آخر يمكن دمجه معا كما لو كانت الأشقاء. على سبيل المثال، تعرض تعليقات يوتيوب لمستوى واحد فقط. يقول أنظمة أخرى في بعض الأحيان "مستوى التعشيش تجاوز" بعد 5 مستويات أو نحو ذلك.

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

المحلول

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

إذا كان هذا هو الحال، فأنا لا أعرف لماذا تريد أن تقسم مؤشر ترابط عبر الصفحات بشكل تعسفي بشكل تعسفي حسب التاريخ (الخيار 1). باستخدام صفحة واحدة مع Culling تعليقات منخفضة التصنيف (الخيار 3) تبدو قاسية صغيرة وقد تثني المستخدمين من نشر التعليقات. قد يكون ذلك أمرا جيدا إذا كنت قد حصلت على كتلة جمهور مثل Slashdot، ولكن قد يكون غير مرغوب فيه بالمواقع ذات معدلات الزيارة النموذجية.

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

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

نصائح أخرى

أعتقد أن ما تحتاجه هو تخزين بيانات هرمية في قاعدة بيانات. يجب أن تبدأ بهذه المقالات:مقالة في SitePoint. مقالة في موقع Mysql

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