كيفية توفير الصفحة التالية من المحتوى المحدث؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

لا تتردد في تعديل العنوان إذا كنت تعرف كيفية صياغة السؤال بشكل أفضل.(يعد وضع العلامات مشكلة أيضًا.) قد تكون المشكلة صعبة للغاية في هذا الشكل العام، لذلك دعونا نفكر في مثال ملموس.

يمكنك الحصول على شاشة مليئة بالأسئلة المتعلقة بتدفق المكدس عن طريق الطلب /questions ?sort=newest صفحة.رابط الصفحة التالية يؤدي إلى /questions?page=2 &sort=newest.أفترض أنه من جانب الخادم، تتم ترجمة الطلب إلى استعلام SQL مع جملة LIMIT.المشكلة في هذا الأسلوب هي أنه إذا تمت إضافة سؤال جديد أثناء تصفح المستخدم للصفحة الأولى، فستبدأ صفحته الثانية ببعض الأسئلة التي رآها بالفعل.(إذا كان لديه 10 أسئلة في كل صفحة، وتمت إضافة 10 أسئلة جديدة، فسوف يحصل على نفس المحتوى تمامًا في المرة الثانية!)

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

أفضل فكرة لدي (بصرف النظر عن تخزين سجل الطلبات لكل عميل) هي استخدامها /questions?answer_id=NNN شكل.يقوم الخادم بإرجاع صفحة تبدأ بالإجابة المطلوبة، ويضع معرف الإجابة الأولى في الصفحة التالية في رابط الصفحة التالية.يجب أن تكون هناك طريقة لكتابة SQL لذلك، أليس كذلك؟

هل هو كيف يتم ذلك عادة؟أو هناك طريقة أفضل؟

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

المحلول

لا يمكن القيام بذلك بطريقة سهلة.على سبيل المثال، يتم فرز قائمة "لم يتم الرد عليها" هنا في Stackoverflow حسب عدد الأصوات.لذا، إذا قمت بحفظ المعرف الأخير للصفحة التي تشاهدها (في ملف تعريف الارتباط، أو الطلب، أو الجلسة، في أي مكان) وقام شخص ما بالتصويت لصالح منشور أثناء تصفحك للصفحة 2، فلن تكتمل الصفحة 3 منذ التصويت مؤخرًا كان من الممكن نقل المشاركة إلى الصفحة 1 أو 2.

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

كما ذكرنا سابقًا، دعونا نأمل أن يكون الناس معتادين على هذا الآن.

نصائح أخرى

معظم مواقع الويب التي رأيتها لا تحل هذه المشكلة - فهي تعرض لك صفحة تتضمن بعض المحتوى الذي شاهدته بالفعل.

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

ضع علامة على كل سؤال مع إدخال وقته في قاعدة البيانات، واحتفظ بوقت آخر تحميل للصفحة الأولى كملف تعريف ارتباط أو جزء من عنوان URL، وقصر البحث على العناصر n خلال n+displaynum كما تمضي قدما.

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

أعتقد أن SQL (لـ MySQL) سيكون:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top