/ Mysql

SNS中关注及好友新鲜事的一种实现方案(PHP+Mysql)

某个网站系统需要用到SNS的关注以及好友新鲜事的功能,摸索了半天写了个SQL语句来实现,功能上没有问题,不过不确定运行效率怎么样。

首先是关注功能,这个简单,只要新建一个follow表就行,代码如下:

CREATE TABLE follow ( id int(11) NOT NULL auto_increment, fid int(11) NOT NULL COMMENT '被关注', uid int(11) NOT NULL COMMENT '关注者', PRIMARY KEY (id), KEY uid (uid) )

用一个论坛作为例子,新鲜事的类别有两种,用户发表主题帖和用户发表回复,主题帖和回复分别存在topic和reply两张表中,这两张表有几个相同的字段:id,authorid,time,topic表中有一个title字段,reply表中还有一个fid代表主题帖的id,用户表menber,有字段uid和username。

表结构大概就是这样。

新鲜事需要提取的信息有:被关注用户的用户名在什么时间做了什么事(发主题或回复的帖子标题)。

select member.username,topic.title,topic.create_time,'发布' as action /使用as别名指定新鲜事类型/ from topic left join member on member.id = topic.author /使用left join横向合并/ where topic.author in (select fid from follow where uid = 123) /使用子查询/ union select /跨表联合查询纵向合并/ member.username,topic.title,reply.create_time,'回复' as action /使用as别名指定新鲜事类型/ from reply left join topic on reply.fid = topic.id /使用left join横向合并/ left join member on member.id = reply.author /使用left join横向合并/ where reply.author in (select fid from follow where uid = 123)/使用子查询/ order by create_time desc limit 10 /按时间排序、选择10条/

SNS中关注及好友新鲜事的一种实现方案(PHP+Mysql)
Share this