Nuestra comunidad se centra en temas fijados y temas fijados globalmente. Lamentablemente, no hay ningún contador de estadísticas para esto en las páginas de perfil de los usuarios, y parece que los temas fijados o fijados globalmente no se almacenan de manera sistemática en ninguna parte de la base de datos.
Ante esto, estoy buscando una manera de otorgar insignias, al menos por ejemplo: “Primer tema fijado”, “10 temas fijados”, “100 temas fijados”, así como para temas fijados globalmente.
¿Podría alguien ayudarme con el SQL para las insignias de este tipo?
Mi punto de partida:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.unpinned IS NOT NULL
GROUP BY p.user_id
HAVING count(*) > 5
Pero esto me da el error:
ERROR: column t.unpinned does not exist
LINE 6: WHERE t.unpinned IS NOT NULL
Supongo que tengo que usar unpinned, ya que, hasta donde sé, no hay otro punto de datos que se mantenga en los temas que alguna vez han sido fijados, o ¿podría usar post_actions aquí?
¿O tal vez buscar el primer mensaje en un tema de un usuario del personal/sistema que contenga “fijado hace …” para contar? action_code => pinned.disabled
Actualización: Esto parece funcionar de alguna manera…
SELECT t.user_id, current_timestamp granted_at
FROM badge_posts p
INNER JOIN topics t on t.id = p.topic_id
WHERE p.action_code ilike 'pinned.disabled'
GROUP BY t.user_id
HAVING count(*) > 0
Pero no estoy seguro de si este es el mejor enfoque, y como un mensaje puede ser fijado y desfijado varias veces… no estoy seguro de si esta consulta solo captura UN pinned.disabled por topic.id.
Agradecería la ayuda de un experto en SQL de insignias.
O también considerar almacenar los fijados de manera sistemática en la base de datos, como los “me gusta”, etc., a partir de ahora, y mostrarlos en la sección de Estadísticas del perfil del usuario y debajo con enlaces como “TE FIJARON”. Porque si un tema se fija, es un reconocimiento mucho mayor en comparación con los “me gusta” y debería tenerse en cuenta.
