0

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

我有一个名为朋友的表,我正在保存这样的连接

user_id  |   friend_id  |   request   |   add_date

现在我需要编写一个 sql 查询来获取特定用户的朋友添加的最新朋友,他们是否已经是用户的朋友。用户也必须被接受。

将其视为新闻提要,我将查看我的朋友最近添加了谁(最近添加的新人可以是我的朋友,也可以不是我的朋友)

到目前为止,我有这个,但只有当我的朋友添加我已经有的人时才有效。

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 的朋友

4

1 回答 1

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。

于 2013-05-04T16:44:14.617 回答