作者jjjkkkooo (接科噎欧)
看板Database
标题Re: [SQL ] 类似Facebook加好友机制
时间Wed Jun 29 09:41:47 2011
※ 引述《jjjkkkooo (接科噎欧)》之铭言:
: ※ 引述《smlboby (波比)》之铭言:
: : 用自己 join 的方式作 ?!
: : T-SQL(请自行翻译) :
: : select MTable.*
: : from friend as MTable join friend as STable
: : on MTable.friend_user_id = STable.user_id
: : and MTable.user_id = STable.friend_user_id
: : and MTable.user_id = 1
: 自问自答一下,我後来想到一个方法:
: select * from friend where friend_user_id in
: ( select user_id from friend where friend_user_id = 1)
: and user_id = 1
再来自问自答顺便整理一下:
假设有一 friend Table 如下
----+--------+-------
user_id | friend_user_id | friend_name
----+--------+-------
1 | 2 | 小明
1 | 3 | 小华
1 | 4 | 小三
1 | 5 | 小二
2 | 1 | 小一
3 | 5 | NULL
3 | 2 | John
3 | 1 | Mary
若是资料表设计成朋友关系非双向,而是多一个栏位判断是否接受邀请
那如果要设计成user_id可以为friend取名字就有点困难,我当初会把
资料表做这种设计应该是这种考量
现在考虑 user_id = 1 的使用者,那麽它有三种好友
要得到这三种好友的状况如下(mySQL):
a.对方送出邀请,自己尚未答覆好友
select * from friend where friend_user_id = 1 and user_id not in
(select friend_user_id from friend where user_id = 1)
b.自己送出邀请,对方尚未答覆好友
select * from friend where user_id = 1 and friend_user_id not in
(select user_id from friend where friend_user_id = 1)
c.得到/送出邀请,且已答覆的好友
select * from friend where user_id = 1 and friend_user_id in
(select user_id from friend where friend_user_id = 1)
若有问题请不吝指教 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.118.210.159
1F:推 jkly1846:我的情况只有AC两种 然後个人资料在另一张表 不会放一起 06/29 16:09
2F:推 menjar:在资料量大下,条件用in会不会造成效能上有问题? 07/03 08:19