关闭

整合dz论坛短消息出现的问题

635人阅读 评论(0) 收藏 举报

       最近在做的模块是用户与用户,系统与用户之间发信息,论坛整合是dz的,为了以后升级,所以短消息的原型是dz的短消息表,它里面有收件箱,发件箱和草稿箱三个箱子,可是我们这个系统中要在这个基础上多加两个箱子,保险箱和回收站,在保险箱中的信息,系统和用户都不能删除,只有把它转移到别的箱中才能进行删除操作。当然了,一条信息只能所属一个箱子,并且还能转移信息,也就是在保险箱中既有收件箱,发件箱,草稿箱和回收站,只不过是folder的编号不同,反之。为了说明遇到的问题,先把dz的表结构,和箱子的编号说一下,0:收件箱,1:发件箱,2:草稿箱,3:保险箱,4:回收站,因为dz只有前三个,所以后两个是我们自己添加,有的系统保险箱是单独的一个表,因为还有考虑到升级的问题,所以就么有考虑这种做法,
主键       发送人id       收件人Id       箱子       标题       内容       是否已读
Pmid       msgfromid      msgtoid          folder      subject    message  new

       如果没有添加后两个箱子的话,如果我发信给  B ,那么msgfromid是我,msgtoidB,在我的消息系统当然没有信息(如果在发送的同时并且保存在发件箱,那么就会出现两条记录,只不过箱子不同,那么在我的发件箱中就会有一封信息),我中的收件箱是按msgtoid来收信,反之B中的收件箱也是按msgtoid来算,Sql语句:收件箱是按msgtoid= meid and folder=0 发件箱是:msgfromid = meid and folder = 1(草稿箱和发件箱等同只不过folder不同)。B 反之。

   说到现在肯定一点问题都没有,但是如果我们加上两个箱子,并且还能转移信息,那么问题就出来。

   如果我再给B发信息,并且发一条,保存一条,收件箱和发件箱还是按上面的语句走,但是如果我其中的一封信息转移到了保险箱(folder3),如果按上面的语句,就是两个箱子Or一下,也就是:(msgfromid = B and folder = 3 Or (msgtoid = B and folder = 3),按正常来说,我给B发信息,发出去之后,对这条信息的处置权跟我没有关系了,可是如果我同时给B发一封,在自己保留一封(发件箱),也就是出现两条记录,只不过在我这边是发件箱(1),在B中是收件箱(0),

msgFromid     msgtoid          folder

Me                 B            0            (在B中是收件箱)已经发出去了,处置权归B

Me                 B           1            (在我中是发件箱),这条信息是我的, 处置权归我

 

假设我把发件箱中这条信息的箱子转移到保险箱中(folder : 3) 也就是

msgFromid     msgtoid          folder

Me                 B            0            (在B中是收件箱)处置权归B

Me                 B           3            (原先在我中是发件箱,现在是保险箱) 处置权归我

 

我没有转移前:按着(msgfromid = B and folder = 3 Or (msgtoid = B and folder = 3)

肯定在B中的保险箱没有信息,

可是在我转移后我把我的folder 改成3

在按着上面的语句就会出现,在我的包厢中的信息,同时出现在B中的保险中中,可是这条信息的确是我的,后果就不说了。。

   出现上面的问题,所以就不能按dz的写了,所以为了解决上面的问题,就只能在加一个字段了,ower信息所有者,说明这条信息到底是谁的,在调收件箱就不能是msgtoid = meid and folder = 1 了,就变成owerid = meid and folder= 1 ,这样在出现我发一条在保存一条,只不过就是owerid不同了,也就没有在取我信息的总条数用selct count(*) as pmidcount from dnt_pms where (msgfromid = meid and folder = 1 ) or (msgtoid=meid and folder = 0) or (msgfromid = meid and folder = 2),就不用判断箱子了,直接用Select count(*) as pmidcount from dnt_pms where owerid = meid .

 

现在我用的是这种办法,不知道这种做法有没有其他的问题,反正我现在感觉还没有:)

如果还有其他的好办法,在这请教以下

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:176481次
    • 积分:2818
    • 等级:
    • 排名:第12704名
    • 原创:87篇
    • 转载:59篇
    • 译文:2篇
    • 评论:85条
    最新评论