كيف تكتب منطق "آخر مرة" مثل هذا على verflow stack
-
02-10-2019 - |
سؤال
أنا أعمل على تطبيق له منطق مماثل فيما يتعلق بموعد مشاهدة المستخدم آخر مرة. لقد واجهت مشكلة مفاهيمية آمل أن يساعدني بعضكم المعلم.
يتم تسجيل جميع النشاط في جدول ActivityLog في قاعدة البيانات
عندما يضرب المستخدم الذي تم تسجيله الموقع وجلسة جديدة ، أقوم بتحديث سجل النشاط مع معرف المستخدم وبعض المعلومات العامة للغاية. يحدث نفس الشيء عندما يقومون بإنشاء سجل جديد ، وتحديث ملفهم الشخصي ، إلخ.
المشكلة التي أواجهها هي هذا.
إذا استخدمت أحدث عنصر نشاط ، فانتقل إلى صفحة حسابي الشخصي ، فإن "آخر مرة شوهدت" تظهر منذ ثانية واحدة لأنني فقط ضربت DB في البداية ... هذا ليس جيدًا لأنني أريد أن أرى ماذا كنت "آخر" هناك ، وليس عندما أكون هناك الآن ".
ومع ذلك ، إذا استخدمت Skip(1).Take(1)
للحصول على السجل الثاني في قاعدة البيانات ، ثم عندما يشاهد شخص آخر ملف التعريف الخاص بي بينما قد يكون لدي "فقط" وقعت على ... سوف يرون أنني كنت أقول قبل أسبوع وليس اليوم.
ما نوع المنطق الذي ستستخدمه من أجل الحصول على كعكتك وتناولها أيضًا؟
أنا أستخدم ASP.NET MVC2 و LINQ إلى SQL ، لكنني أعتقد أن هذا السؤال أكثر ملحقًا للغة.
المحلول
يبدو أنه يمكنك فقط عرض ثاني أحدث سجل للمستخدم الحالي ، وبالنسبة لجميع المستخدمين الآخرين ، يعرض السجل الأحدث.
نصائح أخرى
ما سأفعله (ببساطة لتجنب حلقة منطقية كبيرة) هو إضافة حقلين. current_seen
و last_seen
. على نقل تسجيل الدخول current_seen
إلى last_seen
وحدد current_seen
إلى الطابع الزمني الحالي. ثم عرض last_seen
كـ "آخر مرة شوهد على XX/XX/XXX".
مكان واحد للنظر هو في الكود المصدري إلى OSQA (نظام سؤال وجواب المصدر المفتوح) -
ونعم ، يبدو الأمر يشبه إلى حد كبير Stackoverflow (على أقل تقدير).