消息表 MSG-INFO ID,TITLE,ISALL(是否发送给全部)
消息关联表 MSG-USER ID,MSGID,USERID,ISREAD
消息可以发送给全部用户和指定用户,发送给指定用户时,添加数据到消息关联表,
发送给全部用户时,不添加。在用户阅读后添加。
请问如何查询到指定用户的所有消息记录以及阅读状态。
用户还需要查询消息状态。
查询消息阅读状态的时候,因为发送给全部。无法查询到消息阅读记录。
消息表 MSG-INFO ID,TITLE,ISALL(是否发送给全部)
消息关联表 MSG-USER ID,MSGID,USERID,ISREAD
消息可以发送给全部用户和指定用户,发送给指定用户时,添加数据到消息关联表,
发送给全部用户时,不添加。在用户阅读后添加。
请问如何查询到指定用户的所有消息记录以及阅读状态。
用户还需要查询消息状态。
查询消息阅读状态的时候,因为发送给全部。无法查询到消息阅读记录。
你这里还需要一个用户表吧,我写了一个示范:
WITH msg(MSGID,TITLE,ISALL) 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(id,MSGID,USERID,ISREAD) AS(
SELECT 1,1,1,1 UNION
SELECT 2,2,1,0 UNION
SELECT 3,1,2,0 UNION
SELECT 4,3,2,0
),users(userid,username) 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.userid,0)=CASE WHEN t.isall=0 THEN t.userid ELSE isnull(mu.userid,0) END
ORDER BY t.MSGID