是飞白不是非白 2017-10-31 08:18 采纳率: 50%
浏览 2762

请教一下关于“关注用户和消息接受的数据库设计”

先说一下需求:当任意用户点赞你的文章时或关注你的时候你会收到消息,当你关注的用户发表了一篇文章你会接受到消息。

接下来贴出相关的几张表
1、用户关注表
图片说明
USER_ID和FANS_ID为联合主键,userId是被关注人,fansId是关注人。当用户关注某人时会插入一条信息,IS_DELETED为0;取消关注是IS_DELETED为1。
_2、消息表
图片说明
ID是自动递增的主键,用来记录消息的顺序。USER_ID是动作发起人,INFO_TYPE是消息类型用来区分是关注、点赞还是关注用户发布了文章。RECEIVE_USER_ID是消息接受人,因为关注和点赞消息是一对一的,该字段记录该谁接受消息;而发布文章是一对多的则需要关联关注表来查询。

来贴一下SQL
SELECT
*
FROM
(
SELECT
fm.ID,
fm.INFO_TYPE type,
fm.MEDIA_TITLE mediaTitle,
fm.MEDIA_URL mediaUrl,
fm.user_id userId,
fu.nick userName
FROM
fs_message fm
LEFT JOIN fs_user fu ON fm.user_id = fu.id
WHERE
fm.RECEIVE_USER_ID = '402878625d7e163f015d8883133201c8'
UNION
SELECT
fm.ID,
fm.INFO_TYPE type,
fm.MEDIA_TITLE mediaTitle,
fm.MEDIA_URL mediaUrl,
fm.user_id userId,
fu.nick userName
FROM
fs_message fm
LEFT JOIN fs_user fu ON fm.user_id = fu.id
LEFT JOIN fs_media_follow fmf ON fm.USER_ID = fmf.user_id
WHERE
fm.INFO_TYPE = '3'
AND fmf.FANS_ID = '402878625d7e163f015d8883133201c8'
and fmf.is_deleted = '0'
) f
ORDER BY
f.id DESC

问题所在

如果这么SQL查的话,用户取消了对某个作者的关注时。这个作者以前发布文章的消息也会消失。现在的需求是用户取消关注时,关于该作者以前的消息依然保留,新消息不再接受。请教各位大神该怎么解决这问题,数据库要怎么设计好或是SQL语句要怎么写

  • 写回答

1条回答 默认 最新

  • longlong3207 2017-10-31 12:48
    关注

    发布消息会不会记录时间?,取消关注的时候也记录时间,那么取消关注的时,查询作者发布消息在用户取关时间之前 //并且INFO_TYPE是关注//
    斜线里面的我考虑到关注取消关注再关注之后

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?