استعلام لإنشاء بعض المجموعات بناءً على النشاط

في مجتمعي، أحتاج إلى تقسيم الأشخاص بناءً على:

  • الإعجابات المستلمة (30 - 100 - 200)
  • المنشورات المقروءة 1 ألف 2 ألف 5 ألف
  • الحد الأدنى للمنشورات خلال العام الماضي

كيف يمكنني القيام بذلك باستخدام مستكشف البيانات؟
أود الحصول على استعلام أضع فيه هذه المعلمات ويقوم بسرد الأشخاص، حتى أتمكن من إضافتهم يدويًا إلى مجموعة. سهل جداً
بعض التلميحات؟ من أين يمكنني البدء؟

إعجابَين (2)

أعتقد أن شيئًا كهذا يمكن أن ينجح:

-- [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

هذا رائع!
كيف يمكنني العثور على ما إذا كان المنشور قد تم إنشاؤه 10 مرات على الأقل خلال العام الماضي؟
ليس فقط مرة واحدة كما في استعلامك

كيف يمكنني دمج هذا الاستعلام؟ Posts created for period

فقط للتأكد، هل تبحث عن الإعجابات والمشاركات المقروءة على الإطلاق أم أن هذه الأعداد تخص العام الماضي أيضًا؟

تبدو هذه المجموعات مشابهة بشكل مريب لمجموعات مستوى الثقة الحالية (ويتم ملء هذه المجموعات تلقائيًا بمقاييس مماثلة) - لماذا لا تقوم بتعديل العتبات الحالية وتجعل كل شيء يتم إنجازه لك؟

/admin/site_settings/category/trust

على سبيل المثال، بالنسبة لمستوى الثقة 2 (الأعضاء في trust_level_2 أو ما يعادلها في لهجتك):

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

سيضيف برنامج التشغيل الآلي الآن الأشخاص إلى مجموعة إذا حصلوا على شارة. إذا كان بإمكانك استخدام SQL مخصص للشارات، فيمكنك أتمتة ذلك، ولكنه يبدو مثل مستويات الثقة.

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

يمكنني رؤية مزايا إنشاء مجموعات مخصصة. على سبيل المثال، يعتمد المستوى 3 (TL3) فقط على الحد الأدنى من المشاركة بمرور الوقت. لذلك يمكن لشيء مثل هذا أيضًا استبعاد الأشخاص من كل مجموعة مخصصة إذا انخفضت مشاركتهم على مدار العام.

كما أنهم لن يكونوا مقيدين بالقدرات القياسية ويمكنهم الاستفادة من الميزات التي تدعم المجموعات أو الفئات المميزة المحددة.

لا أعرف ما هو الإعداد المحدد لهذه المجموعات، لذلك قد يكون من الممكن تحقيق ذلك من خلال مستويات الثقة.

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

على الإطلاق للإعجابات والمشاركات المقروءة (الأولى للتركيز على المساهمات الجيدة وليس فقط المشاركات، والثانية لموازنتها)
الحد الأدنى للمشاركات هو خلال العام الماضي فقط، وهو معلمة لفهم ما إذا كان الأعضاء لا يزالون نشطين باستمرار.

يمكن أن تكون طريقة جيدة ولكن في حالتي يجب علي تعديل TL1 و TL2 و TL3 بشكل كبير وأحتاج إلى مراعاة القيود أدناه

عذرًا، لا يمكنني فهم ذلك، هل يجب علي استخدام شارة؟
هممم، كيف يمكنني تعديل الاستعلام أعلاه لإدراجه في شارة؟

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

في هذه الحالة، أعتقد أن شيئًا كهذا يمكن أن يوفر البحث اليدوي:

-- [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

هذا ممكن أيضًا. :partying_face: ستحتاج إلى شارة واحدة (واستعلام شارة) لكل مجموعة، و أتمتة مصاحبة باستخدام البرنامج النصي “عضوية مجموعة المستخدم من خلال الشارة”. يمكنك أيضًا أتمتة الشارات بدلاً من منحها يدويًا عن طريق تمكين الشارات المخصصة التي يتم تشغيلها (Enable Badge SQL و Creating triggered custom badge queries)

هناك الكثير من الأجزاء المتحركة، لذا قد ترغب في إبقائها بسيطة في هذه المرحلة.

إعجابَين (2)

هذا مذهل! شكرا جزيلا لك يا جيمي

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

لا مشكلة. :slight_smile: نأمل أن تتمكن من التحقق من حصولك على النتائج المتوقعة مع الأول، والثاني يجب أن يسهل إضافتها إلى مجموعة. :+1:

أخبرني إذا كان هناك أي شيء يحتاج إلى تعديل. :slight_smile:

لقد قمت بدمجها وتحسينها (بمهاراتي الضعيفة في 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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.