在一个表中组合两个朋友关系来源

时间:2017-04-16 15:54:04

标签: mysql algorithm

我有用户的移动应用。一切都很简单 - 每个用户都有 id name

用户表

id name 
1  John
2  Dave 
3  Jack

这些用户中的一些人是我的问题的主要目的 - 找到重建友谊表的最佳方式(唯一的规则是user_id_1< user_id_2)

友情表

id user_1_id user_2_id 
1  1         2
2  1         3 
3  2         3

我怎么知道用户是朋友?我从不同来源(社交网络A,社交网络B)获取此信息。 因此,如果两个用户至少是两个社交网络之一的朋友 - 他们是我的应用中的朋友

现在我每天都在重建友谊表:

  1. 接受每个用户,为此用户创建空数组NewFriends
  2. 从友谊表
  3. 中删除包含其ID的所有记录
  4. 在网络A中找到他所有的朋友( A-friends
  5. 对于每个 A-friends - 在我的应用中找到它们并将它们添加到NewFriends数组
  6. 在网络B中找到他所有的朋友( B-friends
  7. 对于每个 B-friends - 在我的应用中找到它们并将它们添加到NewFriends数组中(如果它们不存在)
  8. 从友情表中删除NewFriends数组中未提及的所有友情记录
  9. 将所有友谊记录从NewFriends数组插入到之前不存在的友谊表
  10. 如何更好地解决此问题?

2 个答案:

答案 0 :(得分:1)

首先, 你可以使用2个网络中唯一的一个表(而不是使用A-friends表和B-friends表) 当选择时你可以使用distinct关键字 步骤将是:

  1. 接纳每个用户
  2. 从友谊表
  3. 中删除包含其ID的所有记录
  4. 在网络A中找到他所有的朋友并将其添加到(临时朋友)
  5. 在网络B中找到他所有的朋友并将其添加到(临时朋友)
  6. 对于每个不同的临时朋友 - 在NewFriends表中添加记录
  7. 从友情表中删除NewFriends数组中未提及的所有友情记录
  8. 将所有友谊记录从NewFriends数组插入到之前不存在的友谊表

答案 1 :(得分:1)

您可以使用set数据类型代替数组。使用set的原因是设置不包含重复值。

使用两套oldFriendshipsnewFriendships

  1. 从友谊表加载数据到oldFriendships
  2. 新建newFriendships
    2.1。从网络 A 查找用户的所有朋友,并将其添加到newFriendships
    2.2。来自网络 B 查找用户的所有朋友并将其添加到newFrindships
  3. 更新友情表
    3.1查找oldFriendships补丁newFrindships - 这是删除的友谊,从友谊表中删除这些值 3.2。查找newFrindships补丁oldFriendships - 这是添加友谊,将这些值添加到友谊表
  4. 以下是关于补充的wikipeda文章