类似新浪微博的关注与相互关注
不知道别人是怎么设计的。反正我是如下设计的
ID USER FRIEND
1   A     B
2   B     A
3   A     CID为自增
user  为发起关注者
friend 为被关注者现在需求如下。给出A、B两用户ID  如何判断A与B的关系   
很简单要,是A关注B,还是A与B相互关注
一条SQL 尽可能的利用索引,不用OR ,尽可能的快速
(不要求得到B是否关注A)

解决方案 »

  1.   

    select *
    from xxxxx
    where USER='A' and  FRIEND='B'
    union all
    select *
    from xxxxx
    where USER='B' and  FRIEND='A'
      

  2.   


    create table tb_user_concern
    (ID      int  auto_increment primary key,
     USER    varchar(32),
     FRIEND  varchar(32)
    );-- 查询和A相互关注的USER
    select *
    from tb_user_concern a
    where user = 'A'
    and exists 
        (select *
         from tb_user_concern b
         where a.user = b.friend
         and a.friend = b.user);
         
    -- 查询A关注,但未关注A的USER
    select *
    from tb_user_concern a
    where user = 'A'
    and not exists 
        (select *
         from tb_user_concern b
         where a.user = b.friend
         and a.friend = b.user);-- 查询关注A,但A未关注的USER 
    select *
    from tb_user_concern a
    where friend = 'A'
    and not exists 
        (select *
         from tb_user_concern b
         where a.user = b.friend
         and a.friend = b.user);