问题描述
- 消息表 如何获取消息表和消息状态
- 消息表 MSG-INFO IDTITLEISALL(是否发送给全部)
消息关联表 MSG-USER IDMSGIDUSERIDISREAD
消息可以发送给全部用户和指定用户,发送给指定用户时,添加数据到消息关联表,
发送给全部用户时,不添加。在用户阅读后添加。请问如何查询到指定用户的所有消息记录以及阅读状态。
用户还需要查询消息状态。
查询消息阅读状态的时候,因为发送给全部。无法查询到消息阅读记录。
解决方案
解决方案二:
你这里还需要一个用户表吧我写了一个示范:
WITH msg(MSGIDTITLEISALL) AS ( SELECT 1'msg1 for all'1 UNION SELECT 2'msg2 for user1'0 UNION SELECT 3'msg3 for user2'0 UNION SELECT 4'msg4 for all'1 )msg_user(idMSGIDUSERIDISREAD) AS( SELECT 1111 UNION SELECT 2210 UNION SELECT 3120 UNION SELECT 4320 )users(useridusername) AS ( SELECT 1'AAAAA' UNION SELECT 2'BBBBB' UNION SELECT 3'CCCCC')SELECT * FROM ( SELECT * FROM msg AS m users AS u) t LEFT JOIN msg_user AS mu ON mu.msgid= t.msgid AND mu.userid=t.userid WHERE isnull(mu.userid0)=CASE WHEN t.isall=0 THEN t.userid ELSE isnull(mu.userid0) ENDORDER BY t.MSGID
解决方案三:
对应isall=1 的会把所有用户关联出来,然后再根据msg_user表查看阅读状态,如果这个对没有对应记录就是未读(isread is null)
如果isall=0,那么仅关联msg_user中对应的用户
时间: 2024-11-04 17:44:47