استخدام التفاعلات لمنح الشارات

تبدو هذه طريقة مثيرة للاهتمام لتحقيق ذلك، وسأكون مهتمًا بمعرفة المزيد إذا كنت ترغب في مشاركة المزيد من التفاصيل في أي وقت!

3 إعجابات

بالتأكيد. :slight_smile:

بشكل أساسي، في أبسط صوره، تختار رد فعل يشير إلى “أعتقد أن هذا يستحق شارة” والتي يمكن لأعضائك استخدامها لترشيح المشاركات، ويقوم الاستعلام بالتقاط المشاركات التي حصلت على هذا الرد فعل. يمكنك بعد ذلك إما منح الشارة يدويًا من القائمة التي يقدمها لك الاستعلام، أو منحها بشكل جماعي إذا كنت تثق تمامًا في القائمة، أو حتى إعداد SQL مخصص للشارة ليقوم النظام بذلك تلقائيًا. :magic_wand:

يمكنك أيضًا تطبيق بعض المعايير الإضافية على الاستعلام لجعله أكثر استهدافًا. على سبيل المثال، “تحتاج المشاركة إلى عدد معين من هذا الرد فعل”، أو “فقط هذا الرد فعل الذي تم تقديمه بواسطة TL2+ هو الذي يُحتسب”.

كما أنه يعمل مع الرموز التعبيرية المخصصة أيضًا إذا لم يكن هناك رمز تعبيري حالي تعتقد أنه مناسب.

إعجابَين (2)

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

لدي واحدة كنت ألعب بها، على الرغم من أنني وضعتها جانبًا للنظر إليها بعيون جديدة ولم أعد إليها بعد، لذلك قد تحتاج إلى بعض العمل. إنها لمنح شارة بناءً على الحصول على 10 مشاركات على الأقل مع رد الفعل :chefs_kiss: الذي قدمه عضو في مجموعة ‘data-team’ للمشاركات في فئة Data & reporting

SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
  JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
  AND EXISTS (
         SELECT 1
            FROM discourse_reactions_reactions dr
             JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
             JOIN group_users gu ON gu.user_id = dru.user_id
            WHERE dr.post_id = p.id
              AND dr.reaction_value = 'chefs_kiss'
              AND gu.group_id = 175
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 10

على الرغم من أنني لم أكن راضيًا عن استخدام MIN لأنها أعطت تاريخ منح خاطئ.

هناك الكثير من المعايير لها، وهي تلقائية، مما أعتقد أنه يدفعها إلى النهاية الأكثر تعقيدًا. أعتقد أن شيئًا أبسط يمكن أن يكون قابلاً للتحقيق أكثر بكثير دون الكثير من الجهد.

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

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

WITH reaction_pairs AS (
    SELECT
      p.user_id AS received_reaction_user_id,
      dru.user_id AS gave_reaction_user_id,
      dr.post_id,
      t.id AS topic_id,
      t.slug AS topic_slug,
      p.post_number,
      dru.created_at AS reaction_date
    FROM
      discourse_reactions_reactions dr
      JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
      JOIN posts p ON dr.post_id = p.id
      JOIN topics t ON p.topic_id = t.id
    WHERE
      dr.reaction_value = 'Your_Specific_Reaction_Here'
)
SELECT
  ur1.id AS user_id,
  ur2.username AS "المستخدم الذي قدم رد الفعل",
  'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "رابط المنشور",
  rp.reaction_date AS "تاريخ رد الفعل",
  COUNT(*) AS "عدد ردود الفعل"
FROM
  reaction_pairs rp
  JOIN users ur1 ON rp.received_reaction_user_id = ur1.id
  JOIN users ur2 ON rp.gave_reaction_user_id = ur2.id
GROUP BY
  ur1.id,
  ur2.username,
  rp.topic_slug,
  rp.topic_id,
  rp.post_number,
  rp.reaction_date
ORDER BY
  "عدد ردود الفعل" DESC, "تاريخ رد الفعل" DESC
إعجابَين (2)

لجعل هذه الجزئية تقوم بسحرها، أضف _url إلى اسم العمود، هكذا:

'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url
4 إعجابات