我正在创建一个小型社交网络,当用户在其中发布任何内容时。我会得到他推荐帖子的朋友的 id。现在的问题是,被推荐的用户可以介于1 or 10
. 所以现在假设一个用户发布了一个状态并推荐了 6 个朋友。
现在我需要在发布状态的用户和被推荐的人之间找到共同的朋友。意思是假设发布状态的用户有id 1
,被推荐的人有2,3,4,5,6,7
。
所以查询会做什么,它将在1 and 2
那时找到共同的朋友1 and 3
,1 and 4
直到 7 点。所以最后我会得到一个结果,其中包含发布的用户和被推荐的人之间的共同朋友(或标记我们可以说)。
我有两张桌子User
和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
现在,friends 表可以包含用户表中存在或不存在的不同人。在此示例中,用户 2 和 3 有共同的 id 为 8 的朋友。我有我的人,但那个人 id 即8
必须出现在用户表也是。这仅在用户 ID 2 和 3 之间。我将获得几个用户 ID,并且我找到了与发布状态的人推荐的所有朋友的共同朋友。
我希望我已经清除了它。如果我了解查询的想法,我可以使用 php 为不同数量的推荐朋友动态生成它。
到目前为止,我已经编写了这个查询。
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
但这只是给我带来了两个用户之间的共同朋友。当我添加第三个人时,让我们说f3
并将其与f1
它进行比较不会带来任何结果,并且此查询的另一个问题是它没有验证共同朋友 id 是否存在于用户表与否。添加第三个人后。
SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
INNER JOIN friends AS f3 ON f1.friendsid = f3.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748
AND f3.userid = 536772587
这个查询不会带来任何结果。所以我想创建一个查询来完成这一切。
编辑:
实际上我正在使用 facebook connect 并且当用户登录时我将所有用户的朋友保存在我的数据库中,用户表将只包含那些在我的网站上注册的用户。