إيجاد مستخدمي "أعلى X" الحاصلين على أكبر عدد من الشارات

هل قام أي شخص بكتابة استعلام SQL لعرض قائمة بالمستخدمين (أفضل 10 على سبيل المثال) مرتبة حسب إجمالي عدد الشارات التي يمتلكونها؟

لقد تجولت قليلًا في مستكشف البيانات ونظرت إلى جدول “user_badges”، وأستطيع أن أرى وجود عمود “user_id” وعمود “badge_id”، لكنني لست ماهرًا بما يكفي في SQL لتنفيذ نوع من استعلامات العد أو الربط لإنتاج قائمة بأفضل عشرة.

هل قام أي شخص بالفعل بشيء مشابه من قبل؟

المستخدمين مرتبون حسب عدد الشارات

جرب هذا:

-- [params]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top
6 إعجابات

مرحبًا @SidV :wave:t2:

هذا يعمل بشكل جيد جدًا، شكرًا لك!

ومع ذلك، ليس دقيقًا تمامًا…

إليك ما أحصل عليه:

لكن عند تمرير الماوس فوق بعض هؤلاء المستخدمين، تظهر أرقام مختلفة.

يحتوي Memento على 44 (وليس 48):

ويحتوي Brian على 33 (وليس 35):

بينما يحتوي Paul فعليًا على 34!

إذا قمت بإزالة السطر الذي يستبعد المشرفين، فإن الأمر يصبح غير منضبط قليلاً:

يحتوي Ping على 52 (وليس 179):

لكن Ozone يحتوي بالفعل على 47:

هل لديك أي فكرة عما قد يسبب هذه الأخطاء @SidV ؟

شكرًا مرة أخرى على مساعدتك في هذا الأمر :smiley:

نعم. تتوفر العديد من الشارات خيار الفوز بها أكثر من مرة. :thinking:

تحقق من هذا إذا كان أكثر دقة:

-- [params]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us, badges b
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND b.id = ub.badge_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
AND b.multiple_grant = 'f'
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top
4 إعجابات

يا إلهي! :man_facepalming:t2

نعم، بالتأكيد :blush:

ومع ذلك، فإن ردك المحدّث هو بالضبط ما أحتاجه :clap:t2:

شكرًا جزيلاً لك يا @SidV :bowing_man:

إعجاب واحد (1)

يسعدني مساعدتك!

تم تحديث قائمة الاستعلامات :rocket:

عيد ميلاد مجيد! :christmas_tree:

8 إعجابات