我正在构建一个用户可以与其他用户(社交平台)建立联系的平台
我有一个名为friends的表,我正在保存像这样的连接
user_id | friend_id | request | add_date
现在我需要编写一个sql查询来获取最近的朋友,特定用户的朋友添加了他们是否已经是用户的朋友。此外,用户必须被接受。
将其视为新闻Feed,我想看看我最近添加的朋友(最近添加的新人可以是我的朋友)
到目前为止,我有这个,但只有当我的朋友添加了我已经拥有的人时才有效。
SELECT user_main_id AS frmname, friend_id AS type_id, add_date AS date
FROM friends
WHERE friend_id
IN
(SELECT friend_id
FROM friends WHERE (friend_id='$user_id' OR user_main_id='$user_id')
AND request=1 AND friend_id!=$user_id)
AND request=1 AND friend_id!=$user_id AND user_main_id!=$user_id
ORDER BY date DESC
也许有更好的理由来解决这个问题。
连连呢?非常感谢谢谢。连接是双向的,user_id和friend_id之间没有区别。设计有这些名称,必须继续推进。
样本记录
96618 50683 1 2013-05-08 13:44:31
96618 1230 1 2013-04-03 18:28:51
11671 96618 1 2013-04-03 13:26:51
11671 1230 1 2013-03-23 18:26:08
一旦96618连接50683就会发生。例如,用户11671将获得一条消息,表示您的朋友96618现在是50683的朋友
答案 0 :(得分:0)
试试这个:
SELECT f2.friend_id
FROM friends f1 # Friends of target user
INNER JOIN friends f2
ON f1.friend_id = f2.user_id # Friends of their friends
AND f2.request = 1
AND f2.friend_id != f1.user_id
INNER JOIN friends f3 # Limiting it to mutual friends
ON f2.friend_id = f3.user_id AND f3.friend_id = f1.user_id
WHERE f1.user_id = 11671 AND f1.request = 1
ORDER BY f2.add_date DESC
请注意,对于您当前的表结构,每个友谊需要两行,每个方向一行。要只使用一行,您可能希望将其拆分为两个表 - friendships和friendship_members。