Ajuda para modificar uma consulta para retornar nomes de usuário, em vez de números de ID

Olá! Estou procurando um pouco de ajuda para modificar uma consulta e retornar nomes de usuário, em vez de números de ID de usuário.

É isso que tenho usado até agora (modificado a partir do excelente tópico Gráfico de Rede de @DavidGNavas):

WITH pairs AS (
    SELECT p.user_id liked, pa.user_id liker
    FROM post_actions pa
    LEFT JOIN posts p ON p.id = pa.post_id
    LEFT JOIN topics t ON t.id = p.topic_id
    LEFT JOIN categories c ON c.id = t.category_id
    WHERE post_action_type_id = 2
    AND c.id = 47
)
SELECT liker liker_user_id, liked liked_user_id, count(*)
FROM pairs
GROUP BY liked, liker
ORDER BY count DESC

Depois disso, tenho usado uma busca VLOOKUP bastante complicada para associar os nomes de usuário aos números de ID…

Assim que tiver uma lista de pares (quem curtiu e quem foi curtido) expressa como nomes de usuário, posso seguir o método usado no tópico do Gráfico de Rede para gerar esse tipo de gráfico — mostrando a atividade dentro de categorias específicas, já que temos comunidades distintas em diferentes partes dos nossos fóruns:

Os gráficos ao vivo são uma forma valiosa de explorar nossas diferentes subcomunidades, identificando rapidamente membros influentes e grupos de pessoas.

Por exemplo, compare nossa comunidade de músicos com a de designers gráficos — há uma grande diferença entre as duas :slight_smile:

12 curtidas

Aqui está uma versão modificada que faz isso:

WITH pairs AS (
    SELECT p.user_id liked_id, pa.user_id liker_id
    FROM post_actions pa
    LEFT JOIN posts p ON p.id = pa.post_id
    LEFT JOIN topics t ON t.id = p.topic_id
    LEFT JOIN categories c ON c.id = t.category_id
    WHERE post_action_type_id = 2
    AND c.id = 1
)
SELECT 
  liker.username as liker,
  liked.username as liked,
  count(*)
FROM pairs
LEFT JOIN users liker
ON liker_id = liker.id
LEFT JOIN users liked
ON liked_id = liked.id
GROUP BY liked, liker
ORDER BY count DESC
10 curtidas

Obrigado @mcwumbly — isso é perfeito :slight_smile:

Agora que o processo não exige mais uma solução alternativa para obter nomes de usuário, vou começar a montar os gráficos de rede para todas as outras partes do nosso fórum.

1 curtida