Abfrage zum Erstellen von Gruppen nach Aktivität

In meiner Community muss ich meine Leute segmentieren basierend auf:

  • erhaltene Likes (30 - 100 - 200)
  • gelesene Beiträge 1k 2k 5k
  • Mindestanzahl an Beiträgen im letzten Jahr

Wie kann ich das mit dem Data Explorer machen?
Ich hätte gerne eine Abfrage, in die ich diese Parameter eingebe und die mir die Leute auflistet, damit ich sie manuell zu einer Gruppe hinzufügen kann. Ganz einfach.
Gibt es einen Hinweis? Wo kann ich anfangen?

2 „Gefällt mir“

Ich glaube, so etwas könnte es tun:

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

Das ist großartig!
Wie kann ich herausfinden, ob der Beitrag im letzten Jahr mindestens 10 Mal erstellt wurde?
Nicht nur einmal, wie in Ihrer Abfrage
Wie kann ich diese Abfrage integrieren? Posts created for period

Nur zur Überprüfung, suchen Sie nach „Likes“ und „Gelesene Beiträge“ aller Zeiten oder sind diese Zählungen auch für das vergangene Jahr?

Das sieht verdächtig nach den bestehenden Vertrauensstufen-Gruppen aus (und die Population dieser wird durch ähnliche Maßnahmen automatisiert) – warum ändern Sie nicht einfach die bestehenden Schwellenwerte und lassen das alles für sich erledigen?

/admin/site_settings/category/trust

z.B. für TL2 (Mitglieder sind in trust_level_2 oder Äquivalent in Ihrem Dialekt):

1 „Gefällt mir“

Das Automatisierungsskript wird nun Personen zu einer Gruppe hinzufügen, wenn sie einen Badge erhalten. Wenn Sie benutzerdefinierte SQL-Abfragen für Badges verwenden können, können Sie dies automatisieren, aber es klingt nach Vertrauensstufen.

1 „Gefällt mir“

Ich sehe die Vorteile, eigene zu erstellen. Zum Beispiel ist nur TL3 auf minimale Interaktion über die Zeit angewiesen. Etwas wie dies könnte also auch Leute aus jeder benutzerdefinierten Gruppe entfernen, wenn ihre Interaktion im Laufe des Jahres nachlässt.

Sie wären auch nicht an die Standardfähigkeiten gebunden und könnten von gruppenaktivierten Funktionen oder spezifischen Premium-Kategorien profitieren.

Ich weiß jedoch nicht, wie die spezifische Einrichtung dafür ist, daher könnte dies durch Vertrauensstufen erreicht werden.

1 „Gefällt mir“

Alle Zeiten für Likes und gelesene Beiträge (das erste soll sich auf gute Beiträge konzentrieren, nicht nur auf Beiträge, das zweite soll dies ausgleichen)
Das Minimum an Beiträgen gilt nur für das vergangene Jahr, es ist ein Parameter, um zu verstehen, ob die Mitglieder noch konstant aktiv sind.

Es könnte ein guter Weg sein, aber in meinem Fall müsste ich TL1, TL2 und TL3 stark modifizieren und die untenstehenden Einschränkungen berücksichtigen.

Entschuldigung, ich verstehe es nicht. Soll ich eine Auszeichnung verwenden?
Ähm, wie kann ich die obige Abfrage modifizieren, um sie in eine Auszeichnung einzufügen?

1 „Gefällt mir“

In diesem Fall denke ich, dass etwas wie dieses die manuelle Nachschlagefunktion bieten könnte:

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

Und wenn man es anpasst/reduziert, um nur Benutzernamen anzuzeigen, erhält man eine Liste, die man in das Feld „Benutzer hinzufügen“ auf der Seite der Gruppe(n) kopieren und einfügen könnte, wenn man die Ergebnisse als CSV exportiert (und sie beispielsweise in Notepad öffnet):

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

Das ist auch möglich. :partying_face: Sie benötigen eine Auszeichnung (und eine Auszeichnungsabfrage) für jede Gruppe und eine begleitende Automatisierung mit dem Skript „Benutzergruppenzugehörigkeit durch Auszeichnung“. Sie könnten die Auszeichnungen auch automatisieren, anstatt sie manuell zu vergeben, indem Sie die benutzerdefinierten ausgelösten Auszeichnungen aktivieren (Enable Badge SQL und Creating triggered custom badge queries)

Es gibt jedoch viele bewegliche Teile, daher möchten Sie es in diesem Stadium vielleicht einfach halten.

2 „Gefällt mir“

Das ist erstaunlich! Vielen Dank, Jammy

1 „Gefällt mir“

Keine Sorge. :slight_smile: Hoffentlich können Sie mit der ersten überprüfen, ob Sie die erwarteten Ergebnisse erhalten, und die zweite sollte das Hinzufügen zu einer Gruppe erleichtern. :+1:

Lassen Sie mich wissen, wenn etwas angepasst werden muss. :slight_smile:

Ich habe sie zusammengeführt und verbessert (mit meinen schlechten SQL-Kenntnissen). Wenn ich Benutzernamen benötige, lade ich einfach die CSV-Datei herunter und kopiere/füge die Benutzerspalte ein.
Ich habe likes_received_max hinzugefügt, damit ich Gruppen ausschließen kann, die oben genannte Gruppe ausgenommen.

Zum Beispiel:
first_steps: 5 Likes (<30), 500 gelesene Beiträge, >5 Beiträge im letzten Jahr,
beginners: 30 Likes (<100), 1000 gelesene Beiträge, >10 Beiträge im letzten Jahr
padawan: 100 Likes, 2000 gelesene Beiträge, >10 Beiträge im letzten Jahr
hero: 200 Likes, 5000 gelesene Beiträge, >10 Beiträge im letzten Jahr

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