What is the bug reporter badge?

Oh, sorry, I didn’t look at the context the query was being used in. You’ve currently got something like this:

WHERE category_id = (
  SELECT id FROM categories
  WHERE name IN ('OAuth', 'Developers')
)

Since the inner query is returning multiple rows, you need to change the outer WHERE clause to:

WHERE category_id IN (
  SELECT id FROM categories
  WHERE name IN ('OAuth', 'Developers')
)
إعجاب واحد (1)

Success, thanks!

Would this be too much to run whenever a user acts on a post?

Could it easily be modified to award a badge when a post is ‘marked as a solution’ rather than liked?

edit: Actually, that’s giving me: ‘Contract violation: Query triggers on posts, but does not reference the ‘:post_ids’ array’

I can probably live with update daily though. ¯_(ツ)_/¯

@sam, we’re looking on implementing a similar badge over at Stonehearth. Can you share the current SQL used, as yours is 2+ years old, and there are numerous different versions in this topic?

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

Bug Reporter

SELECT distinct p.user_id, p.created_at granted_at, p.id post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
JOIN post_actions pa ON pa.post_id = p.id AND 
      post_action_type_id = (
                SELECT id FROM post_action_types WHERE name_key = 'like'
       ) AND 
       pa.user_id IN (
           SELECT gu.user_id
           FROM group_users gu
           WHERE gu.group_id = ( SELECT id FROM groups WHERE name ilike 'team' ) 
       )
WHERE category_id = (
  SELECT id FROM categories WHERE name ilike 'bug'
) AND p.post_number = 1

Tech Support

SELECT id user_id, current_timestamp granted_at
FROM users
WHERE id  IN (
       SELECT p1.user_id 
       FROM post_custom_fields pc
       JOIN badge_posts p1 ON p1.id = pc.post_id
       JOIN topics t1 ON p1.topic_id = t1.id
       WHERE p1.user_id <> t1.user_id AND 
                    name = 'is_accepted_answer' AND 
            p1.user_id IN (
                   SELECT user_id 
                   FROM posts 
                   WHERE :backfill OR  p1.id IN (:post_ids)
            )
        GROUP BY p1.user_id
        HAVING COUNT(*) > 9
)

Tester

SELECT p.user_id, MIN(p.created_at) granted_at
  FROM posts p
  JOIN topics t ON t.id = p.topic_id
 WHERE t.category_id = (SELECT id FROM categories WHERE name ILIKE 'bug')
   AND p.post_number = 1
   AND EXISTS (
         SELECT 1
           FROM post_actions pa
          WHERE pa.post_id = p.id 
            AND pa.post_action_type_id = (SELECT id FROM post_action_types WHERE name_key = 'like') 
            AND pa.user_id IN (SELECT user_id FROM group_users WHERE group_id = (SELECT id FROM groups WHERE name ILIKE 'team'))
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 10

Senior Tester

SELECT p.user_id, MIN(p.created_at) granted_at
  FROM posts p
  JOIN topics t ON t.id = p.topic_id
 WHERE t.category_id = (SELECT id FROM categories WHERE name ILIKE 'bug')
   AND p.post_number = 1
   AND EXISTS (
         SELECT 1
           FROM post_actions pa
          WHERE pa.post_id = p.id 
            AND pa.post_action_type_id = (SELECT id FROM post_action_types WHERE name_key = 'like') 
            AND pa.user_id IN (SELECT user_id FROM group_users WHERE group_id = (SELECT id FROM groups WHERE name ILIKE 'team'))
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 20
12 إعجابًا

I was just awarded the Tester badge, but I only have 2 Bug Reporter badges. The text of the Tester badge says this:

grafik

Reported 10 bugs that were liked by the Discourse team

I just checked: One of my bug reports has 10 :heart: likes, but not even those are exclusively by Discourse Team members.

Something seems to be wrong with the badge… :thinking:

إعجابَين (2)

There are several old bugs that were deleted as not of future historical interest, but the total isn’t 10.

إعجابَين (2)

Thanks, I fixed the queries and updated @sam’s post.

7 إعجابات

@sam أين يجب أن أقوم بتشغيل هذا الرمز للحصول على هذه الشارة المعينة، وهل يجب علينا إنشاء فئة لتقرير الأخطاء؟

SELECT p.user_id, MIN(p.created_at) granted_at
  FROM posts p
  JOIN topics t ON t.id = p.topic_id
 WHERE t.category_id = (SELECT id FROM categories WHERE name ILIKE 'bug')
   AND p.post_number = 1
   AND EXISTS (
         SELECT 1
           FROM post_actions pa
          WHERE pa.post_id = p.id
            AND pa.post_action_type_id = (SELECT id FROM post_action_types WHERE name_key = 'like')
            AND pa.user_id IN (SELECT user_id FROM group_users WHERE group_id = (SELECT id FROM groups WHERE name ILIKE 'team'))
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 20

هذه الشارة خاصة بـ meta.

آه، لا يمكننا استخدامه في الخطاب؟

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

نعم، يمكننا ذلك. ولكن يجب تغيير أسماء الفئات والمجموعات إلى أسماء صالحة.

3 إعجابات

مفهوم، مثل إخفاء خدعة الفئة، ولكن هنا لم أتعرف على مكان تشغيل كود sam؛ من لوحة المسؤول أو داخل حاوية rails c؟

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

قد لا تجد مكان إضافة الرمز لأن تحرير SQL للشارات معطل افتراضيًا. انظر هنا:

لذلك أعتقد أن العملية ستكون:

  1. تمكين تحرير SQL للشارات (تعليمات في الموضوع المرتبط)
  2. إنشاء شارة جديدة في المسؤول > الشارات (أو تحرير شارة موجودة إذا كنت قد أنشأتها بالفعل)
  3. إضافة SQL الخاص بك إلى الشارة وحفظها
  4. تعطيل تحرير SQL للشارات

ثم إذا لم تكن قد فعلت ذلك بالفعل، بناءً على القيم الموجودة في SQL الذي نشرته:

  1. إنشاء فئة تسمى “bug”
  2. إنشاء مجموعة مستخدمين تسمى “team”
  3. إضافة المستخدمين الذين تريد أن يكونوا قادرين على قبول تقارير الأخطاء إلى “team”
5 إعجابات

قد يكون هذا تحسينًا للاستعلام :slight_smile:

WITH LikeActionTypes AS (
    SELECT id
    FROM post_action_types
    WHERE name_key = 'like'
),

DiscourseGroup AS (
    SELECT id
    FROM groups
    WHERE name ILIKE 'discourse'
),

BugCategory AS (
    SELECT id
    FROM categories
    WHERE name ILIKE 'bug'
)

SELECT
    p.user_id,
    MIN(p.created_at) AS granted_at,
    MIN(p.id) AS post_id
FROM badge_posts AS p
LEFT JOIN topics AS t ON t.id = p.topic_id
LEFT JOIN post_actions AS pa ON pa.post_id = p.id
LEFT JOIN LikeActionTypes AS lat ON pa.post_action_type_id = lat.id
LEFT JOIN group_users AS gu ON pa.user_id = gu.user_id
LEFT JOIN DiscourseGroup AS dg ON gu.group_id = dg.id
LEFT JOIN BugCategory AS bc ON t.category_id = bc.id
WHERE p.post_number = 1
GROUP BY p.user_id;
إعجابَين (2)