我正在建立一个社交网络,我希望我的成员能够轻松找到新朋友。就像在 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?
这是我在 PostgreSQL 中找到的用于查找 2 个配置文件(ID 为 24 的配置文件和 ID 为 26 的配置文件)之间共同朋友数量的查询:
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 是朋友一样,有 2 条记录:(24, 26) 和 (26, 24)。这使他们更容易加入并找到共同的朋友,但这不是我想要建立我的数据库的方式。
如果有人可以帮助我开始这个查询,我将非常感激。