MYSQL为多个用户检索共同的朋友

时间:2012-10-16 17:53:47

标签: mysql

我正在创建一个小型社交网络,当用户发布任何内容时。我会收到他推荐帖子的朋友的ids。现在的问题是,被推荐的用户可能介于{{1}之间}。所以现在假设用户发布了一个状态并推荐了6个朋友。

现在我需要在发布状态的用户和逐个推荐的人之间找到共同的朋友。意味着假设发布状态的用户具有标识1 or 10并且被推荐的人具有{{1 }}

那么查询将会发现它会在1然后2,3,4,5,6,7然后1 and 2之间找到共同的朋友,依此类推。直到7.结束时,我将得到包含该结果的结果发布的用户与被推荐的人(或我们可以说是标记的)之间的共同朋友。

我有两张表1 and 31 and 4

User

现在,朋友表可以包含在用户表中存在或不存在的不同人。在此示例中,用户2和3具有共同ID为8的朋友。我有我的家伙,但是那个家伙是{{{ 1}}也必须存在于用户表中。这仅在用户标识2和3之间。 我将获得几个用户ID,并且我找到所有朋友的共同朋友,这些朋友被提交给已经发布状态的人。

我希望我已经清除了它。如果我得到了查询的想法,我可以使用php为不同数量的推荐朋友动态生成它。

到目前为止,我已经写了这个查询。

Friends

但这只会给我两个用户之间的共同朋友。当我添加第三个人时,可以说 User Table: Friends Table: -------------------------- ----------------------------------- UserID Name friendsid friendname userid -------------------------- ----------------------------------- 1097517748 User1 3 friend1 536772587 100003052455644 User2 8 friend2 100003052455644 536772587 User3 8 friend3 1097517748 4 User4 3 friend4 100003052455644 并将其与8进行比较,但它不会带来任何结果,此查询的另一个问题是它没有验证共同的朋友ID是否存在于用户表中。添加第3个人之后。

SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748

此查询不会带来任何结果。所以我想创建一个完成所有这些操作的查询。

修改

实际上我正在使用facebook连接,当用户登录时,我将所有用户朋友保存在我的数据库中,用户表将只包含在我的网站上注册的用户。

1 个答案:

答案 0 :(得分:1)

我终于明白了。查询是

SELECT DISTINCT(friendsid) FROM (
SELECT DISTINCT(f1.friendsid) FROM friends AS f1 
INNER JOIN friends AS f2 ON f1.friendsid=f2.friendsid 
and f1.userid = 100003052455644 and f2.userid =1097517748 
INNER JOIN user ON  f2.friendsid = user.userid and f1.friendsid = user.userid 
UNION ALL
SELECT  (f1.friendsid) FROM friends AS f1 
INNER JOIN friends AS f2 ON f1.friendsid=f2.friendsid 
and f1.userid = 100003052455644  and f2.userid =536772587
INNER JOIN user ON  f1.friendsid = user.userid and f2.friendsid = user.userid 
UNION ALL
SELECT DISTINCT(f1.friendsid) FROM friends AS f1 
INNER JOIN friends AS f2 ON f1.friendsid=f2.friendsid 
and f1.userid = 100003052455644  and f2.userid =694250830
INNER JOIN user ON  f1.friendsid = user.userid and f2.friendsid = user.userid 
) a

此查询将查找发布状态的用户与其提及的用户之间所有共同朋友的ID。

身份100003052455644的用户是发布状态的人,而其他所有人都是他推荐的朋友。DISTINCT将确保身份证明是唯一且不会重复。这是针对他引用了3个人。我们可以添加动态设置id的UNION ALL部分,这将有助于我们创建动态查询,以便为不同数量的推荐人检索共同的朋友。