先说一下需求:当任意用户点赞你的文章时或关注你的时候你会收到消息,当你关注的用户发表了一篇文章你会接受到消息。
接下来贴出相关的几张表:
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
FROMfs_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
FROMfs_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语句要怎么写