ソーシャル ネットワークを構築しています。メンバーが簡単に新しい友達を見つけられるようにしたいと考えています。Facebook と同じように、共通の友達の数から知っている人を何人か紹介したいと思います。
友情のための私の PostgreSQL データベース構造は次のとおりです。
> PROFILES_FRIENDSHIPS
> ----------------------
> - fri_profile_from // int, Person who sent the friendship request
> - fri_profile_to // int, Person who received the friendship request
> - fri_accepted // tinyint, has the person accepted the friendship request?
これは、2 つのプロファイル (ID 24 のプロファイルと ID 26 のプロファイル) 間の共通の友達の数を見つけるために PostgreSQL で見つけたクエリです。
SELECT COUNT(*)
FROM profiles AS p
INNER JOIN (
SELECT (
CASE WHEN ( 26 = f.fri_profile_from ) THEN f.fri_profile_to
ELSE f.fri_profile_from END) AS fri_profile_from
FROM profiles_friendships AS f
WHERE 1 = 1
AND (f.fri_profile_to = 26 OR f.fri_profile_from = 26)
AND fri_accepted = 1)
AS f1
ON (f1.fri_profile_from = p.pro_id)
INNER JOIN (
SELECT (
CASE WHEN ( 24 = f.fri_profile_from ) THEN f.fri_profile_to
ELSE f.fri_profile_from END) AS fri_profile_from
FROM profiles_friendships AS f
WHERE 1 = 1
AND (f.fri_profile_to = 24 OR f.fri_profile_from = 24)
AND fri_accepted = 1)
AS f2
ON (f2.fri_profile_from = p.pro_id)
今、私はこのクエリを変換して、私の最も共通の友人であるが、私とは友人ではないプロファイルを見つけられるようにしようとしています. しかし、成功しませんでした... 私もこのウェブサイトで多くの例を調査しましたが、それらのほとんどは友情テーブルの二重記録で作業しています. 24 が 26 と友達である場合のように、(24, 26) と (26, 24) の 2 つのレコードがあります。これにより、参加したり共通の友達を見つけたりするのが簡単になりますが、それは私がデータベースを構築したい方法ではありません.
誰かがこのクエリを開始するのを手伝ってくれたら、とても感謝しています.