MySql中的多级数据选择

时间:2013-11-17 21:52:35

标签: mysql sql facebook

假设我们有100万行的用户表。每个用户约有100个朋友。所以我们可能会拿出一张大约100,000,000行的朋友表。

现在,如果用户发布的内容并定义了其朋友和朋友的朋友和朋友的共享和可见性... [100 * 100 * 100](如Google+圈子),获取此所需列表的最佳方法是什么最快的方式。 (我的意思是选择的类型......如果需要额外的表......) 非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我不知道这是否是最快的方式,但您可以使用 Inner Join 来完成此操作。假设您要为user_id = 1的用户检索朋友的朋友和朋友,您可以执行以下操作:

(select friend_id from friends where user_id = 1) 
union 
(select distinct f2.friend_id from friends f1
  INNER JOIN friends f2 on f2.user_id = f1.friend_id
  where f1.user_id = 1)

同样,我不确定它是否是最快的方式,但它比使用Sub-Query for Select更好。

编辑:第一个SELECT语句将为您提供一个用户列表,这些用户是id = 1的用户的朋友。第二个SELECT语句将为您提供与id为该用户的所有朋友的朋友的用户列表= 1.第二个语句使用INNER JOIN。最后,两个结果集都使用UNION进行组合。