كيف يمكنني القيام بذلك باستخدام مستكشف البيانات؟
أود الحصول على استعلام أضع فيه هذه المعلمات ويقوم بسرد الأشخاص، حتى أتمكن من إضافتهم يدويًا إلى مجموعة. سهل جداً
بعض التلميحات؟ من أين يمكنني البدء؟
-- [params]
-- int :likes_received
-- int :posts_read
SELECT
us.user_id,
us.likes_received,
us.posts_read_count
FROM user_stats us
JOIN users u on u.id = us.user_id
WHERE u.last_posted_at > CURRENT_DATE - INTERVAL '1 YEAR'
AND us.likes_received >= :likes_received
AND us.posts_read_count >= :posts_read
ORDER BY 2 DESC, 3 DESC
تبدو هذه المجموعات مشابهة بشكل مريب لمجموعات مستوى الثقة الحالية (ويتم ملء هذه المجموعات تلقائيًا بمقاييس مماثلة) - لماذا لا تقوم بتعديل العتبات الحالية وتجعل كل شيء يتم إنجازه لك؟
/admin/site_settings/category/trust
على سبيل المثال، بالنسبة لمستوى الثقة 2 (الأعضاء في trust_level_2 أو ما يعادلها في لهجتك):
سيضيف برنامج التشغيل الآلي الآن الأشخاص إلى مجموعة إذا حصلوا على شارة. إذا كان بإمكانك استخدام SQL مخصص للشارات، فيمكنك أتمتة ذلك، ولكنه يبدو مثل مستويات الثقة.
يمكنني رؤية مزايا إنشاء مجموعات مخصصة. على سبيل المثال، يعتمد المستوى 3 (TL3) فقط على الحد الأدنى من المشاركة بمرور الوقت. لذلك يمكن لشيء مثل هذا أيضًا استبعاد الأشخاص من كل مجموعة مخصصة إذا انخفضت مشاركتهم على مدار العام.
كما أنهم لن يكونوا مقيدين بالقدرات القياسية ويمكنهم الاستفادة من الميزات التي تدعم المجموعات أو الفئات المميزة المحددة.
لا أعرف ما هو الإعداد المحدد لهذه المجموعات، لذلك قد يكون من الممكن تحقيق ذلك من خلال مستويات الثقة.
على الإطلاق للإعجابات والمشاركات المقروءة (الأولى للتركيز على المساهمات الجيدة وليس فقط المشاركات، والثانية لموازنتها)
الحد الأدنى للمشاركات هو خلال العام الماضي فقط، وهو معلمة لفهم ما إذا كان الأعضاء لا يزالون نشطين باستمرار.
يمكن أن تكون طريقة جيدة ولكن في حالتي يجب علي تعديل TL1 و TL2 و TL3 بشكل كبير وأحتاج إلى مراعاة القيود أدناه
عذرًا، لا يمكنني فهم ذلك، هل يجب علي استخدام شارة؟
هممم، كيف يمكنني تعديل الاستعلام أعلاه لإدراجه في شارة؟
في هذه الحالة، أعتقد أن شيئًا كهذا يمكن أن يوفر البحث اليدوي:
-- [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)
هناك الكثير من الأجزاء المتحركة، لذا قد ترغب في إبقائها بسيطة في هذه المرحلة.
لقد قمت بدمجها وتحسينها (بمهاراتي الضعيفة في SQL)، إذا احتجت إلى أسماء مستخدمين، أقوم فقط بتنزيل CSV ونسخ/لصق عمود اسم المستخدم.
أضفت likes_received_max حتى أتمكن من تقسيم المجموعات، باستثناء المجموعة أعلاه.
على سبيل المثال: first_steps: 5 إعجابات (<30)، 500 منشور مقروء، >5 منشورات العام الماضي. beginners: 30 إعجابًا (<100)، 1000 منشور مقروء، >10 منشورات العام الماضي. padawan: 100 إعجاب، 2000 منشور مقروء، >10 منشورات العام الماضي. hero: 200 إعجاب، 5000 منشور مقروء، >10 منشورات العام الماضي.
-- [params]
-- int :likes_received
-- int :posts_read
-- int :likes_received_max
-- int :posts_count
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,
u.username,
us.likes_received,
us.posts_read_count,
ua.posts_count,
u.title
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 >= :posts_count
AND us.likes_received < :likes_received_max
ORDER BY 2 ASC, 3 ASC, 4 ASC