但是如上好像只能找出此用户未读的短消息来,我现在想做成可以标记出系统短消息中此用户哪些没看过
select * from CommonMessage where messageid not in (select messageid from UserMessage where uid=@uid) 哪些看过
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid)并且用户可以自己把不想显示的系统短消息删除(用字段标记一下不显示),那位能有好的建议?
要实现此功能,上述的数据结构得有变化:
UserMessage表加两列,一个表示此用户是否愿意读此信息(IsVisible),一个表示此用户是否读过该信息(IsRead)这时上述的两个查询得做相应的修改
select * from CommonMessage where messageid not in (select messageid from UserMessage where uid=@uid) 哪些看过
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid)并且用户可以自己把不想显示的系统短消息删除(用字段标记一下不显示),那位能有好的建议?
要实现此功能,上述的数据结构得有变化:
UserMessage表加两列,一个表示此用户是否愿意读此信息(IsVisible),一个表示此用户是否读过该信息(IsRead)这时上述的两个查询得做相应的修改
不是已经有记录用户看过哪些的表么?否则又怎可能“ select * from ......”?!对于用户不想显示系统短消息,用户不读它又怎样去知道设置何时设置它?没有什么要修改、设计的,那两个表已经够了。
select * from CommonMessage where messageid not in (select messageid from UserMessage where uid=@uid)
//已经读了
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid) //未读的消息属于系统的肯定不能删除了,要不然就不能存在系统消息这一说了读过的可以直接删除
//如下
delete from usermessage where messageid=@msgid and uid=@uid;2. 如果要删除用户未读的消息,那就得在创建消息的时候给用户消息表创建一条消息记录,并置标志位为未读0,修改消息表增加一个字段,阅读标志
读完消息就更改阅读标志为1,那上面的Sql语句也得更改
//未读
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 读标志='0')//已读
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 读标志='1')//删除,不管读不读 删除都是一样的
delete from usermessage where messageid=@msgid and uid=@uid;
其实是这样的,我想做到未读的用粗体显示,已读的正常显示,可以让用户删除(在数据库里就是标记为不显示,不然用户删除了,其他的用户怎么看)***对于用户不想显示系统短消息,用户不读它又怎样去知道设置何时设置它?***
用户读取了 就会在usermessage表里记录一下,表明读过了,那么我可以作出系统信息用户哪些读取过哪些没读取过,现在是想让用户也可以"删除"读取过的系统消息,那怎么去办?第二 如楼上 Fibona 同学所说
读过的可以直接删除
//如下
delete from usermessage where messageid=@msgid and uid=@uid; 如果这样,那么他删除的信息又会重新在未读的系统短消息里面出来了啊
第二点
我觉得这样做,让系统分发给每一位用户一条短消息没有什么区别了还是感谢各位作出的解答!静候!!
读完消息就更改阅读标志为1, 那上面的Sql语句也得更改
//未读
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 读标志='0') //已读
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 读标志='1') //删除,不管读不读 删除都是一样的
delete from usermessage where messageid=@msgid and uid=@uid; Fibona 同学说在usermessage表里面增加一个标识为阅读标识,我认为应该是是否显示标识
这样修改一下,在usermessage表里面
//已读并且要显示
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 显示标志='0') //已读并且不显示
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 显示标志='1') 未读的就是 select * from CommonMessage where messageid not in(select messageid from UserMessage where uid=@uid) 然后联合?
//已读并且要显示
select * from CommonMessage where messageid in (select messageid from UserMessage where uid=@uid and 显示标志='0')
跟
未读的就是 select * from CommonMessage where messageid not in(select messageid from UserMessage where uid=@uid)
联合一下 就可以得到我想要的那样的情况了吧~
我想要的是一个记录集~