拖延症害死锅

MySQL两个表交叉显示内容
发表于2017-11-24 09:03:49 | 分类:技术 | 阅读:98

MySQL查询两个表的内容,并且将两个表的内容按时间交叉顺序显示出来。


在做一个类似论坛社区网站的时候,考虑到用户能收到的消息提醒有两种:一种是来自别人的评论回复,另一种是别人关注的提醒,两种消息分别存在不同的表中,如果分开显示,显得过分地冗余,一起显示在一个页面内,考虑到用户的体验感,能用时间先后的交叉显示效果肯定是最好的。


1.两个表的结构相近时,可以使用联合查询的方法:


联合查询:将多个结果集合并成一个结果集,前提是列数相同,并且相应的列的类型相同。判断标准以第一个表的结果集为准。执行结果集的特点:结果集的列名以第一个为准;如上面的语句的结果集为在第一个表的基础上,插入第二个表的数据。列数和原来一致,只增加行数。


例如:


表    id   标题      内容    发布时间

表A   id   title   contents    time

表B   id   title   contents    time


表A是新闻表,表B是广告表,要求的显示效果是广告是穿插在新闻列表当中的。因为表A和表B结构相同,可以直接使用联合查询,让两个表的内容直接按时间交叉来显示。


   select * from (select * from A union select * from B) as c order by time desc;


就可以完美实现以下效果:


新闻1   1分钟前

新闻2   3分钟前

广告1   4分钟前

新闻3   6分钟前

广告2   10分钟前

新闻.....



2.两个表的结构明显不同的话(有点暴力?不知道合不合适。)


针对文章开头的关注和评论回复提醒的显示效果


具体操作:


follow  关注表

表    id    用户A    用户B    关注时间

表A   id    user_a   user_b     time


response  回复表

表    id  文章id    回复id   用户A   用户B     内容     回复时间

表B   id  arti_id   res_id  user_a   user_b    main      time


建立第三个表 message

表    id   用户A   用户B   内容   时间

表C   id   user_a  user_b  main   time


message表的结构首先是两个表的共同的基本结构,加上建立一个新字段用来编排两个表的不同部分的内容,具体实现是:


   在第一个follow表插入的时候,触发触发器,将数据插入message表中的一条数据,

   在message表中的main字段中组织成:user_a关注了你(user_b)!
   

   在第二个response表插入时同理插入数据

   在message表中的main字段中组织成:user_a在文章(arti_id)中回复你(user_b): 内容(response.main)。


实现效果就变成了:


小明关注了你!--6分钟前

小明在《XXX》中回复你:XXXX。 --7分钟前

小东在《XXX》中回复你:XXXX。 --8分钟前

小东关注了你!--12分钟前

小明在《XXX》中回复你:XXXX。 --1个小时前

...



消息的显示只要读message表就行了。


    但是这么做的话,触发器会不会给数据库带来太大的负荷,到不是很清楚。


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
点击此处,取消分享
*以下内容皆为必填项目

0条评论

暂无评论
TOP