日期:2014-05-18  浏览次数:20752 次

站内信 数据库表 是否浏览字段
前几天在论坛上问了一个问题
关于如何设计站内信的;

具体是这样:管理员可以向注册用户发送站内信,注册用户可以接受、浏览、删除站内信

当时的答案是:

如果不需要实时的话那比较方便一些

管理员向用户发站内消息,实际上也就是把消息存到数据表中去,当用户登录时到这张表中
去找找看看是否有人给自己留言了,并且是未读的,有的话在界面的某个地方提示一下,以
便用户能点击查看留言列表,当用户点开留言时表示该留言已被读取,同时更新数据表中该
留言的读取状态。

如果需要实时的话那就比较麻烦一些,采用 Ajax 轮询那张表,可以把轮询间隔设成 1 分钟
一次或者是几分钟一次。
[b][/b]

后来仔细的想了想,大概的意思或者做法懂了,可是有一个问题还没想到怎么解决……

比如在站内信的表里设置一个int类型的值表示该站内信是否已读(比如0表示未读,1表示已读)
那么如何在用户浏览站内信的页面判断一封站内信是否为已读呢???
然后每个用户的情况不一样,显示的站内信内容也不一样,这个问题该怎么解决呢???
严重疑惑中……


------解决方案--------------------
比如在站内信的表里设置一个int类型的值表示该站内信是否已读(比如0表示未读,1表示已读) 
那么如何在用户浏览站内信的页面判断一封站内信是否为已读呢??? 
然后每个用户的情况不一样,显示的站内信内容也不一样,这个问题该怎么解决呢??? 
严重疑惑中…… 


這個簡單阿、你在頁面不是得到了一個list麼 在遍曆list bean對象取出表示為是否已讀的那個字段。

判斷它的值為1怎樣 為0怎樣?明白沒有?
------解决方案--------------------
然后每一条站内信后面有一个“标记为已读”的链接,当用户点击此链接时,怎么修改这一条站内信的已读/未 

读属性呢? 

當用戶點擊的時候是不是要跳轉到寧外一個頁面和Action去。你把這個ID帶到Action裏面做數據庫操作改變它的值不就可以了麼。同時查處屬於這條ID的一條內容?
------解决方案--------------------
你这个表如果是把邮件发给两个人其中一个人读了一个没有读,那你怎么显示?还得一个收件人ID及邮件ID的表.
------解决方案--------------------
探讨
csdn 也不过如此

------解决方案--------------------
我也在做一个有相同功能的系统.
如果没有针对用户的一个表,
问题解决不了.
这个表应该包括消息的主键,用户的ID和消息的状态
------解决方案--------------------
对于全局站内信,可以单独做一个表。而不是像一对一的短信那样

表A 为站内短信表,假设为MSGID,MSG
表B 为站内短信跟踪表 MSGID,USERID,STATE,READTIME

列表现时分成两部分处理
先取表A的数据,然后取B的数据,根据B表中的数据处理A的数据,设置为未读、已读或者设置为删除则不显示。

其实处理跟你前面的差不多,只是表不同。


------解决方案--------------------
应该再做一个用户和系统信件的表啊。否则根本不可能处理这个事情的。
------解决方案--------------------
SQL code
--- 环境 SQL Server 2005
create table t_note -- 短信表
(
  note_id  numeric(18,0) primary key identity not null, -- 主键
  note_man numeric(18,0), -- 用户ID
  note_title varchar(100), -- 短信标题
  note_content varchar(200), -- 短信内容
  note_date  char(19),  -- 时间
  flag   char(1),  --标示(1未读 2已读)
)
--- 增加一条短信(未读),它是针对用户ID为1的用户的
insert into t_note 
values(1,'欢迎新用户','**用户欢迎您使用**系统…………',SUBSTRING(CONVERT(VARCHAR(19),GETDATE(),121),1,19),'1')
--- 用户1查看了该短信
select * from t_note where flag = 1 and note_man = 1 
--- 立即将其flag修改为2
update t_note set flag = '2' where note_man = 1 and note_id = 1
--- 这是用 select * from t_note where flag = 1 and note_man = 1 查询不到了
--  结束了。不只我的理解对不?

------解决方案--------------------
這個簡單阿、你在頁面不是得到了一個list麼 在遍曆list bean對象取出表示為是否已讀的那個字段。 

判斷它的值為1怎樣 為0怎樣?明白沒有? 


在数据库里的站内信肯定都是未读的吧,假如用户接收站内信的页面有一个方法得到数据库里的站内信,刚开 

始是全部显示的 

然后每一条站内信后面有一个“标记为已读”的链接,当用户点击此链接时,怎么修改这一条站内信的已读/未 

读属性呢
------解决方案--------------------
用两个表嘛 一个信息表用来储存信息相关属性 另一个使用msgId作为主键和userId等作为用户表 

已读和未读信息在用户表中标记 查询时根据用户表读取信息表的内容

可以了吧
------解决方案--------------------
打开收件箱的时候遍历所有数据 点击未读新建时 即查询单条数据时 在查询之后加一步update 将标记置1
------解决方案--------------------

要想功能越来越强大,至少需要两个表:一个信件表;一个需要读取信件的用户表。

如只是要把消息发给在线的用户,则可用一全局变量对象存储消息及其阅读权限等,

直接在全局变量读取。(临时数据不需做永久记录的)。