【发布时间】:2012-03-17 02:57:39
【问题描述】:
我有一个成员到成员连接表。架构是 member_id、friend_id、is_active。我想建立一个朋友的朋友的成员联系列表。我不确定如何处理查询,更不用说以半优化的方式了。
上表的工作方式是 member_id 和friend_id 在另一个表上本质上是相同的。在我的系统中,这些 id 通常被称为 member_id,除了这张表。例如,假设我的 member_id 是 21。我的号码可以在无限数量的其他行上作为 member_id 或friend_id 它要么基于最初发起实际友谊请求的人,而且我不想要冗余数据在哪里我会欺骗行来基本上做同样的事情。
我想要一个查询,我不仅可以确定学位级别(例如 LinkedIn),而且还可以确定一个人可能有多少共同朋友正在显示(例如 Facebook)。这里的 x 因子是我之前提到的 is_active 列。此列可以是 0 或 1。它是一个简单的 tinyint 列,用作开/关开关。任何带有 1 的朋友连接都将是活跃的友谊,而 0 是待处理的。我需要根据我的活跃朋友和他们的活跃朋友等来进行此查询。我朋友的活跃朋友都不是我的活跃朋友。
如何构建这样的查询(即使我无法显示分离级别并且只能获得相互计数)?现在,我可以想到一些事情,但它涉及到一个又一个的查询,一些嵌套在循环中,是的,我无法想象随着时间的推移这对我的服务器的整体性能或健康有什么好处。
【问题讨论】:
-
似乎对于大多数“最短路径”算法来说,单向路径使事情变得简单得多,所以不要太担心重复。