نظام تصنيف/تصويت MySQL (الترتيب بدقة حسب أفضل تصنيف مع الأخذ بعين الاعتبار عدد الأصوات)
-
13-09-2019 - |
سؤال
لنفترض أن لدي جدول MySQL يشبه هذا:
جدول البرامج:
id int
name text
votes int
rating int
حيث ستكون الأصوات هي عدد المرات التي قام فيها شخص ما بالتصويت لهذا العنصر وسيكون التصنيف هو متوسط تلك الأصوات.
بيانات المثال:
id: 0
name: FooBar!
votes: 5
rating: 3
الآن يأتي مستخدم آخر ويقيم هذا بـ 1.كيف يمكنني حساب التصنيف الجديد؟سيكون من الأفضل إنشاء جدول آخر وإدخال صف جديد في كل مرة يصوت فيها شخص ما
id int
software_id int
score int
user_id int
ثم قم بحساب إعادة حساب متوسط التقييم في كل مرة؟أعتقد أن الأمر سيؤثر سلبًا على الخادم.
السؤال الثاني:
أود أن أكون قادرًا على ترتيب البرنامج حسب الأعلى تقييمًا ولكني لا أريد برنامجًا بمتوسط تقييم 5 نجوم ولكن صوتًا واحدًا فقط ليحتل مرتبة أعلى من برنامج بمتوسط 4 بـ 893 صوتًا.كيف يمكنني تحقيق هذا؟
المحلول
السؤال 1 أ:كيفية حساب متوسط التقييم الجديد:
vote count : 5
average rating: 3
تصويت جديد بتصنيف واحد
5*3+1
new rating= ----- = 16/6 = 8/3 = 2.666..
6
يجب أن تأخذ في الاعتبار "وزن" (1/6 إجمالي الأصوات) للتصويت الجديد والمعدل القديم (5 مرات من أصل 6)..المتوسط القديم 3 يحسب 5 مرات، والتقييم الجديد مرة واحدة => 5*3 +1= 16.ثم تقسم على إجمالي 6 أصوات تم الحصول عليها.
السؤال 1 ب:هل يجب عليك تخزين الأصوات؟
يعتمد الأمر حقًا على ما إذا كنت تتوقع أن تكون لاعبًا أم لا
أقترح عليك أن تفعل ذلك.