Nossa comunidade é centrada em tópicos fixados e fixados globalmente. Infelizmente, não há nenhuma contagem de estatísticas para isso nas páginas de perfil do usuário, e parece que os tópicos fixados/fixados globalmente não são armazenados de forma sistemática em lugar algum no banco de dados.
Diante disso, estou procurando uma maneira de conceder pelo menos os seguintes emblemas: “Primeiro fixado”, “10 fixados”, “100 fixados”, além de tópicos fixados globalmente.
Alguém poderia me ajudar com o SQL para esses tipos de emblemas?
Meu ponto 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
Mas isso me dá o erro:
ERROR: column t.unpinned does not exist
LINE 6: WHERE t.unpinned IS NOT NULL
Acho que terei que usar unpinned, já que, até onde sei, não há nenhum outro ponto de dados que permaneça associado a tópicos que já foram fixados. Ou eu poderia usar post_actions aqui?
Ou talvez pesquisar pela primeira postagem em um tópico feita por um usuário de equipe/sistema que contenha “pinned … ago” para contar? action_code => pinned.disabled
Atualização: Isso parece funcionar de alguma forma…
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
Mas não tenho certeza se essa é a melhor abordagem e, como uma postagem pode ser fixada e desfixada várias vezes… não sei se essa consulta captura apenas UM pinned.disabled por topic.id.
A ajuda de um especialista em SQL para emblemas seria muito apreciada.
Ou também a consideração de armazenar fixações de forma sistemática no banco de dados, como “likes” etc., daqui para frente, e exibi-las na seção de Estatísticas do perfil do usuário, abaixo, com links como “FIXADO”. Porque, se um tópico for fixado, é um reconhecimento muito maior em comparação com likes e deveria ser contabilizado.
