Discuz Ucenter短消息设计

in Develop

UCenter中关于短消息这一块的数据表结构如下:

不大理解这里的delstatus/related二个字段的作用。
delstatus语义上应该是标识该消息的删除状态
related语义为关联,
现在试着以admin给yibin001发一件消息

所执行的SQL语句

SELECT count(*) FROM `ucenter`.uc_pms WHERE msgfromid='1' AND msgtoid='2' AND folder='inbox' AND related='0'
INSERT INTO `ucenter`.uc_pms (msgfrom,msgfromid,msgtoid,folder,new,subject,dateline,related,message,fromappid) VALUES ('admin','1','2','inbox','1','测试消息','1235570029','0','测试消息','1')
SELECT count(*) FROM `ucenter`.uc_pms WHERE msgfromid='2' AND msgtoid='1' AND folder='inbox' AND related='0'
INSERT INTO `ucenter`.uc_pms (msgfrom,msgfromid,msgtoid,folder,new,subject,dateline,related,message,fromappid) VALUES ('admin','2','1','inbox','0','测试消息','1235570029','0','测试消息','0')
INSERT INTO `ucenter`.uc_pms (msgfrom,msgfromid,msgtoid,folder,new,subject,dateline,related,message,fromappid) VALUES ('admin','1','2','inbox','1','测试消息','1235570029','1','测试消息','1')
REPLACE INTO `ucenter`.uc_newpm (uid) VALUES ('2')

以yibin001登录并回复短消息


sql语句

SELECT count(*) FROM `ucenter`.uc_pms WHERE msgfromid='2' AND msgtoid='1' AND folder='inbox' AND related='0'
UPDATE `ucenter`.uc_pms SET subject='回复', message='回复', dateline='1235570298', new='1', fromappid='1' WHERE msgfromid='2' AND msgtoid='1' AND folder='inbox' AND related='0'
SELECT count(*) FROM `ucenter`.uc_pms WHERE msgfromid='1' AND msgtoid='2' AND folder='inbox' AND related='0'
INSERT INTO `ucenter`.uc_pms (msgfrom,msgfromid,msgtoid,folder,new,subject,dateline,related,message,fromappid) VALUES ('yibin001','2','1','inbox','1','回复','1235570298','1','回复','1')
REPLACE INTO `ucenter`.uc_newpm (uid) VALUES ('1')

光看这部分有点晕,没看出delstatus/related二个字段的作用。

8 Comments

8 Comments

  1. 删除状态 个人认为 是一个标识,因为现在的大部分系统中的删除,并不是实际意义的删除,只是改变了显示状态,在检索的时候不被检索而已,这样方便日后回档。

  2. @along:
    按发件人ID查询短消息是这样写的
    $arr1 = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."pms WHERE msgfromid=’$uid’ AND msgtoid=’$touid’ AND dateline>=’$starttime’ AND dateline<’$endtime’ AND related>’0′ AND delstatus IN (0,2) ORDER BY dateline");
    $arr2 = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."pms WHERE msgfromid=’$touid’ AND msgtoid=’$uid’ AND dateline>=’$starttime’ AND dateline<’$endtime’ AND related>’0′ AND delstatus IN (0,1) ORDER BY dateline");
    $arr = array_merge($arr1, $arr

  3. $arr = array_merge($arr1, $arr2);
    这里的delstatus有三个标志位0/1/2
    有时间接着看删除短消息部分

  4. @along:
    另外,就现在的Discuz! 7.0来讲的话,短消息删除后就无法恢复了

  5. 这个你得分析一下 1.0 和 1.5 版本
    1.0 是
    delstatus 删除状态,甲删除为1,乙删除为2 甲乙都删除,才从数据库里删除。
    related 是发起的悄悄话pmid ,即以事件为线索,可以列成帖子状。

    1.5
    delstatus 基本没有用了,短消息是分开发的,而且那个fromuid 什么的都有了新的功能
    related 是不是子pm 。这是为了向下兼容使用 1.0 的应用,所以没有改字段名。

    新的1.5的悄悄话,是以人为线索的,类似QQ聊天记录。
    总结:1.5 的悄悄话,那叫一个乱字。

  6. @blue:
    嗯,的确1.5中的悄悄话是以人为单位,同一人发送的短消息在短消息列表中只会显示最新的一条,查看信息时才会显示对方与自己的历史记录,类似于聊天记录。
    没有与1.0对比,还真看不出某此字段的意义。

  7. 这是哪个GUI tool来着?

  8. Thanks for sharing your thought. Wish you good luck for your future endeavors.

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>