mysql查询有助于在社交网站上找到共同的朋友

时间:2011-09-09 13:40:21

标签: mysql

我有一个名为users的数据库表,每个用户的主键为user_id。

我还有一个名为friends的表,其中包含两个字段user_id和friend_user_id。

user_id字段始终是两个user_id中最低的一个,以避免重复输入。

假设我有两个用户,(假设用户ID 1和用户ID 4虽然可以是任何东西)。

如果用户1和用户4的朋友(即共同朋友)的用户如何返回users表中的所有行?

2 个答案:

答案 0 :(得分:7)

我会给你食谱:

  1. 查找用户1的所有朋友
  2. 查找用户2的所有朋友
  3. 将他们相交,结果将成为共同的朋友。
  4. 很像这样:

    enter image description here

    更新:以下是查询:

    select f.friend_user_id  from friends f where f.friend_user_id in (
       select friend_user_id from friends where user_id=<id_of_user_a>)
    and f.user_id=<id_of_user_b>
    

    上述查询返回的id将是user_a和user_b的共同朋友的所有用户的id。如果您想获得有关这些用户的所有详细信息(名称等),请执行以下操作:

       select f.friend_user_id,u.*  from friends f inner join users u 
       on u.user_id=f.friend_user_id
       where f.friend_user_id in (
       select friend_user_id from friends where user_id=<id_of_user_a>)
       and f.user_id=<id_of_user_b>
    

答案 1 :(得分:0)

SELECT friends.friend_user_id FROM user, friends
INNER JOIN friends ON friends.user_id = user.user_id
WHERE user.user_id = 1 
     AND  friend.friend_user_id 
          IN (SELECT friends.friend_user_id 
             FROM user, friends
             INNER JOIN friends ON friends.user_id = user.user_id
             WHERE user_id = 4)