新手问题 关于好友关系表的一个查询问题

stephen · 2014年08月07日 · 最后由 stephen 回复于 2014年08月07日 · 2932 次阅读

设计一个简单的好友关系

表     friendship
字段  user_id  friend_id

两个字段都是和 user 表的 id 一一关联。 主动邀请者放在 user_id 字段,被邀请者放在 friend_id 字段。 当数据库只存在

user_id   friend_id
   a_id        b_id

的时候,就是 A 向 B 发出好友申请,但 B 还未通过这个好友验证! 当数据表同时存在

user_id   friend_id
   a_id        b_id
   b_id        a_id 

的时候视为双方成为好友。 现在想搜索出 a 的好友,应该怎么搜索?

我想一个思路,Frindship.find_by_user_id(a_id) & Frindship.find_by_friend_id(a_id) 两个集合的交集

加一个friendship_requst表,申请的时候生成条申请数据,申请完后互加好友,毕竟以后筛选好友是个比较频繁的操作,筛选越简单越好,这样直接user.friendships就搞定了,还有个申请记录

你的思路不对。2 楼说的有实际意义。你这个表一定要多字段,或者加表

当然你的思路也可以,但是你这里的好友,只能是互为好友了,如果 B 拒绝的话,B 也就不算 A 的好友了。所以只能是互为好友,才是’好朋友‘。这样的话,1 楼取交集都是不错的方式。

@ane 我希望实现强关系的朋友关系,不是像微博那样的弱关系!可以说说你的思路吗

#7 楼 @stephen 真如 5 楼的连接里一样,你需要有个状态 pending,accepted,requested。当然你如果是强关系,我觉得,你就干脆“accepted,和 requested”。规则如下。friendship 中加字段 type。a 加 B 好友,直接就是“requested”。B 接受的话,修改为“accepted”。同时插入一条 user_id=B,f_id=A,type="accepted"。这样要找 A 的好友,不就简单了?做个"user_id+type","f_id,type",两个索引

需要 登录 后方可回复, 如果你还没有账号请 注册新账号