一分一毛也是爱

微信

微信

支付宝

支付宝

观海听潮

观海听潮博客

登录
还没有账号?去注册
观海听潮

观海听潮博客

注册
  • 欢迎来自美国弗吉尼亚州的访客,您好!
×

我的名片

网名:观海听潮

职业:PHP开发工程师

现居:山东省-青岛市

Email:1256699215@qq.com

网站统计

  • 观海听潮•博客
  • 63篇
  • 145条
  • 55980次
  • 224次
  • 美国弗吉尼亚州

您现在的位置是:首页  > 技术杂谈  > mysql  > php php

观海听潮

站内信的mysql数据库搭建

摘要
站内信有两个基本功能。一:点到点的消息传送。用户给用户发送站内信;管理员给用户发送站内信。二:点到面的消息传送。管理员给用户(指定满足某一条件的用户群)群发消息。具体的数据库搭建是怎样的呢?

一般应用App都会有一个消息栏,展示消息列表,有系统通知消息,物流消息,活动消息等,且都有阅读状态。

基于这种需求,网上的站内信一般有三种方案:

1、一个表解决问题(用户量上百):user_msg

    id:自增id,title:消息标题,content:消息内容,logo:消息图片,user_id:用户id,is_read:阅读状态,is_delete:删除状态

    create_at:创建时间,create_id:创建人,update_at:更新时间

2、两个表解决问题(用户量上万)

    msg_info:消息表

    id:自增id,title:消息标题,content:消息内容,logo:消息图片,create_at:创建时间,create_at:创建人

    user_msg:用户消息表

    id:自增id,user_id:用户id,msg_id:消息id,is_read:阅读状态,is_delete:删除状态,create_at:创建时间,update_at:更新       时间

    这种方法也是在创建消息的时候同时会给要发的用户都创建一条消息,当用户量很大时,会出现数据库卡死的情况

3、3个表解决问题(用户量上百万)

    msg_info:消息表

    id:自增id,title:消息标题,content:消息内容,logo:消息图片,create_at:创建时间,create_at:创建人

    user_type:发送群体(1全部用户 2部分用户),send_status:发送状态,send_at:发送时间

    user_msg:用户消息表

    id:自增id,user_id:用户id,msg_id:消息id,is_read:阅读状态,is_delete:删除状态,create_at:创建时间,update_at:更新

    时间

    当管理员选择部分用户时候,可以用到第三个表,消息用户关联表

    msg_group:消息用户关联表

    id:自增id,user_id:用户id,msg_id:消息id

    这种方法看似跟第二种表结构一样,但是触发的时机是不同的,当管理员发送消息时,如果给所有用户发,则只创建消息表msg_info,

    如果给部分用户发,则创建消息表msg_info和msg_group关联表。而用户消息表则在查看消息的时候去创建。这种方法麻烦的只是查询而已。

消息列表接口:

    未读消息+已读消息

    未读消息:select * from msg_info as a where a.id not in (select id from user_msg);默认给每一项都加上阅读状态和用户id

    已读消息:select a.*,b.user_id,b.is_read from msg_info as a where b.is_delete=2 left join user_msg as b on a.id = b.msg_id;

删除消息接口:

    删除未读消息时直接创建删除好的用户消息表,删除已读消息则直接更改删除状态

阅读消息接口:

    阅读未读消息时直接创建已读状态的用户消息表

一般情况下阅读消息详情时要判断是否已读,未读的话就先调用阅读消息接口。消息详情接口则不用处理状态。


讨厌 (0)
微博logo QQ空间logo QQlogo 豆瓣logo 人人logo 百度贴吧logo 有道云笔记logo

文章评论

表情表情
×
图片图片

评论列表