朋友我的朋友最近添加

时间:2013-05-04 16:08:47

标签: mysql sql

我正在构建一个用户可以与其他用户(社交平台)建立联系的平台

我有一个名为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的朋友

1 个答案:

答案 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。