ユーザーID番号ではなくユーザー名を返すようにクエリを変更するのを手伝ってください

こんにちは!ユーザーID番号ではなく、ユーザー名を返すようにクエリを修正するお手伝いができます。

これまで使用していたクエリ(@DavidGNavas 氏の素晴らしい Network Chart スレッドを改変したもの)は以下の通りです。

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

その後、ユーザー名とID番号を一致させるために、非常に手間のかかる vlookup を使用していました…

「いいね」をした人(liker)とされた人(liked)のペアをユーザー名で表現できれば、Network Chart スレッドで説明されている手法に従って、以下のようなチャートを生成できます。これは、当フォーラムの異なる部分に明確なサブコミュニティが存在するため、特定のカテゴリ内での活動を示すのに役立ちます。

ライブチャートは、さまざまなサブコミュニティを探求し、影響力のあるメンバーや人のクラスターを素早く特定するための貴重な手段です。

例えば、ミュージシャンコミュニティグラフィックデザイナー を比較してみてください。両者には大きな違いがあります :slight_smile:

「いいね!」 12

それを実現する修正版を以下に示します。

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

@mcwumbly さん、ありがとうございます。完璧です :slight_smile:

これでユーザー名を取得するための回避策が不要になったので、他のフォーラム機能についてもネットワーク図の作成を始めます。

「いいね!」 1