Nella mia community devo segmentare le mie persone in base a:
Mi piace ricevuti (30 - 100 - 200)
Post letti 1k 2k 5k
Minimo di post nell’ultimo anno
Come posso farlo usando il data explorer?
Vorrei avere una query in cui inserisco quei parametri e mi elenca le persone, così posso aggiungerle manualmente a un gruppo. Molto facile
Qualche suggerimento? Da dove posso iniziare?
Penso che qualcosa del genere potrebbe funzionare:
-- [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
Questi sembrano sospettosamente simili ai gruppi di Livello di Fiducia esistenti (e la popolazione di questi è automatizzata da misure simili) - perché non modificare semplicemente le soglie esistenti e far fare tutto a te?
/admin/site_settings/category/trust
ad esempio per TL2 (i membri sono in trust_level_2 o equivalente nel tuo dialetto):
Lo script di automazione aggiungerà ora le persone a un gruppo se ottengono un badge. Se puoi usare SQL personalizzato per i badge, puoi automatizzarlo, ma sembra che si tratti di livelli di fiducia.
Posso vedere i vantaggi nel creare gruppi personalizzati. Ad esempio, solo il TL3 si basa sul coinvolgimento minimo nel tempo. Quindi qualcosa di simile potrebbe anche escludere le persone da ciascun gruppo personalizzato se il loro coinvolgimento diminuisce nel corso dell’anno.
Inoltre, non sarebbero legati alle funzionalità standard e potrebbero sfruttare funzionalità abilitate per i gruppi o categorie premium specifiche.
Tuttavia, non so quale sia la configurazione specifica per questi, quindi potrebbe essere realizzabile attraverso i livelli di fiducia.
Tutti i tempi per mi piace e post letti (il primo serve a concentrarsi sui buoni contributi, non solo sui post, il secondo serve a bilanciarlo)
Il minimo di post è solo nell’ultimo anno, è un parametro per capire se i membri sono ancora attivi in modo costante.
Potrebbe essere un buon modo, ma nel mio caso dovrei modificare pesantemente TL1 TL2 e TL3 e devo tenere conto delle limitazioni sottostanti
Mi dispiace, non riesco a capirlo, dovrei usare un badge?
Uhm, come posso modificare la query sopra per inserirla in un badge?
In tal caso, penso che qualcosa di simile potrebbe fornire la ricerca manuale:
-- [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
E modificandolo/semplificandolo solo per i nomi utente fornirebbe un elenco che potresti copiare e incollare nella casella “Aggiungi Utenti” nella pagina dei gruppi se esportassi i risultati come csv (e lo aprissi in qualcosa come notepad, per esempio):
-- [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
Anche questo è possibile. Avresti bisogno di un badge (e una query per badge) per ogni gruppo, e un’accompagnatoria automazione utilizzando lo script “User Group Membership through Badge”. Potresti anche automatizzare i badge piuttosto che assegnarli manualmente abilitando i Badge Personalizzati Attivati (Enable Badge SQL e Creating triggered custom badge queries)
Ci sono molte parti in movimento, quindi potresti voler mantenere le cose semplici in questa fase.
Nessun problema. Spero che con il primo tu possa verificare di ottenere i risultati che ti aspetti, e il secondo dovrebbe rendere più facile aggiungerli a un gruppo.
Li ho uniti e migliorati (con le mie scarse abilità SQL), se ho bisogno di nomi utente scarico il CSV e copio/incollo la colonna dei nomi utente.
Ho aggiunto likes_received_max in modo da poter dividere i gruppi, escludendo il gruppo sopra.
Ad esempio: first_steps: 5 like (<30), 500 post letti, >5 post l’anno scorso, beginners: 30 like (<100), 1000 post letti, >10 post l’anno scorso padawan: 100 like, 2000 post letti, >10 post l’anno scorso hero: 200 like, 5000 post letti, >10 post l’anno scorso
-- [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