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?
-- [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
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):
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.
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.
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?
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. 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.
Keine Sorge. 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.
Lassen Sie mich wissen, wenn etwas angepasst werden muss.
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