هل قام أي شخص بكتابة استعلام 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
نعم. تتوفر العديد من الشارات خيار الفوز بها أكثر من مرة.
تحقق من هذا إذا كان أكثر دقة:
-- [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