【问题标题】:Friends my Friends recently add我的朋友最近添加的朋友
【发布时间】:2013-05-04 16:08:46
【问题描述】:

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

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

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

【问题讨论】:

  • 你能提供样本记录吗?
  • 你可以做一个join,比subselect更好...

标签: mysql sql


【解决方案1】:

试试这个:

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。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多