في هذه الحالة، أعتقد أن شيئًا كهذا يمكن أن يوفر البحث اليدوي:
-- [params]
-- int :likes_received
-- int :posts_read
WITH user_activity AS (
SELECT
p.user_id,
COUNT(p.id) as posts_count
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date >= CURRENT_DATE - INTERVAL '1 YEAR'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY 1
)
SELECT
us.user_id,
us.likes_received,
us.posts_read_count,
ua.posts_count
FROM user_stats us
JOIN user_activity ua ON UA.user_id = us.user_id
WHERE us.likes_received >= :likes_received
AND us.posts_read_count >= :posts_read
AND ua.posts_count >= 10
ORDER BY 2 DESC, 3 DESC, 4 DESC
وتعديله/تجريده إلى أسماء مستخدمين فقط سيوفر قائمة يمكنك نسخها ولصقها في مربع “إضافة مستخدمين” في صفحة المجموعة (المجموعات) إذا قمت بتصدير النتائج كملف CSV (وفتحته في شيء مثل المفكرة، على سبيل المثال):
-- [params]
-- int :likes_received
-- int :posts_read
WITH user_activity AS (
SELECT
p.user_id,
COUNT(p.id) as posts_count
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date >= CURRENT_DATE - INTERVAL '1 YEAR'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY 1
)
SELECT
u.username
FROM user_stats us
JOIN user_activity ua ON UA.user_id = us.user_id
JOIN users u ON u.id = us.user_id
WHERE us.likes_received >= :likes_received
AND us.posts_read_count >= :posts_read
AND ua.posts_count >= 10
ORDER BY 1
هذا ممكن أيضًا.
ستحتاج إلى شارة واحدة (واستعلام شارة) لكل مجموعة، و أتمتة مصاحبة باستخدام البرنامج النصي “عضوية مجموعة المستخدم من خلال الشارة”. يمكنك أيضًا أتمتة الشارات بدلاً من منحها يدويًا عن طريق تمكين الشارات المخصصة التي يتم تشغيلها (Enable Badge SQL و Creating triggered custom badge queries)
هناك الكثير من الأجزاء المتحركة، لذا قد ترغب في إبقائها بسيطة في هذه المرحلة.