概述
关注与粉丝表一般包含我关注的用户,可以查询到我的粉丝列表,查询我关注的用户他们关注了哪些用户等这些功能。
表结构设计
字段 | 说明 |
id | 主键 |
user_id | 用户ID |
focus_user_id | 被关注人ID |
create_time | 创建时间 |
描述说明
- user_id 设置索引 用于查询 我的关注
- focus_user_id 设置索引 用于查询 我的粉丝
- user_id ,focus_user_id 设置联合唯一索引 数据库约束控制 不会出现重复关注
- create_time 设置索引 用于查询 我的粉丝/我的关注 列表时 按时间倒叙分页查询
语句查询
1. 查询 A 的关注用户列表
select focus_user_id from user_focus where user_id = A.userId order by create_time desc
2. 查询 A 的粉丝列表
select user_id from user_focus where focus_user_id = A.userId order by create_time desc
3. 查询 A,B二个用户之间的关注状态
( SELECT 1 from user_focus where user_id = A.userId and focus_user_id = B.userId )
union all
( SELECT 2 from user_focus where user_id = B.userId and focus_user_id = A.userId )
空数组 A,B 之前无任何关系
- [1,2] A,B 相互关注
- [1] A 关注了 B
- [2] B 关注了 A
4. 查询 A,B 共同关注
1. SQL语句
select * from user_focus where user_id in (A.userId,B.userId)
2. 可以用代码来实现此段功能,求A、B两个共同集合的交集
5. 查询 A,B 共同粉丝
同上
6. 查询我关注的用户他们关注了哪些用户,并排除我关注的用户和自己
。有点拗口,就是类似微博的推荐关注用户
select distinct B.focus_user_id from user_fans A
INNER JOIN user_fans B on A.focus_user_id = B.user_id
LEFT JOIN user_fans C on B.focus_user_id = C.focus_user_id AND C.user_id =userId
where A.user_id = userId AND B.focus_user_id != userId
AND C.focus_user_id is NULL limit 10
7. 查询用户A的粉丝,并且这些粉丝是我关注的人
SELECT
A.focus_user_id
FROM
user_fans A
INNER JOIN user_fans B ON A.user_id = B.focus_user_id
WHERE
A.user_id = userId
AND B.focus_user_id = myUserId
LIMIT 3
参考链接