PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

求教,站内信的思路。类似好知网的小纸条或通告功能

发表于 2012-01-11 5890 次查看

求教,站内信的思路。类似好知网的小纸条或通告功能。希望稍稍详细一点。先谢谢了。

6回复
  • 2楼 小青 2012-01-11

    好知网的小纸条功能,形式上参照了facebook的Message,以会话的方式组织。我把数据库的表结构发上来,你看看。表名中"ref"是引用的意思。

    CREATE TABLE IF NOT EXISTS `message` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `threadId` int(10) unsigned NOT NULL,
    `authorId` int(10) unsigned NOT NULL,
    `message` text NOT NULL,
    `createdTime` int(10) unsigned NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    CREATE TABLE IF NOT EXISTS `message_ref` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `userId` int(10) unsigned NOT NULL,
    `threadId` int(10) unsigned NOT NULL,
    `messageId` int(10) unsigned NOT NULL,
    `createdTime` int(10) unsigned NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    CREATE TABLE IF NOT EXISTS `message_thread` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `members` text NOT NULL,
    `hash` varchar(64) NOT NULL,
    `multiple` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否为多人会话(2人以上)',
    `latestReplyUserId` int(10) unsigned NOT NULL,
    `latestReplyTime` int(10) unsigned NOT NULL,
    `latestReplySummary` text NOT NULL,
    `createdTime` int(10) unsigned NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `pairId` (`hash`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    CREATE TABLE IF NOT EXISTS `message_thread_member` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `threadId` int(10) unsigned NOT NULL,
    `memberId` int(10) unsigned NOT NULL,
    `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '0:已离开会话, 1:在会话中',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    CREATE TABLE IF NOT EXISTS `message_thread_ref` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `userId` int(10) unsigned NOT NULL,
    `threadId` int(10) unsigned NOT NULL,
    `unread` int(10) unsigned NOT NULL DEFAULT '0',
    `updatedTime` int(10) unsigned NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

     

  • 3楼 xworld 2012-01-11

    谢谢,我可能更多的是通知功能。思路我大概有个。但我现在有个疑问就是,如果管理员给每个会员都发一个通知。message的表里是每个会员保存一条通知吗?例:管理员给10个会员发送通知,那数据库里的通知表有10条数据呢,还是只有一条数据,而touserid字段有10个会员的id?或者还有其它的方式。

  • 4楼 小青 2012-01-11

    看你系统的规模和业务上的要求,给10个会员发你那两种方式都是可以的。

  • 5楼 xworld 2012-01-11

    这里的10个会员只是个例子。真正的远远不止这样。如果按第一种的话,那有200万会员,管理员发一次消息就要插入200万条数据。而且还是一次性的。那这....

     

  • 6楼 小青 2012-01-11

    也只可以这么做:

    只插入一条放入全局表中,指定要发给全站会员,或者某一类会员。 等会员登录的时候,去读全局表,看看是否有适合该会员的通知,有的话就加到该会员的通知表里去。

    不知道这样做是否能达到你的业务要求。

  • 7楼 xworld 2012-01-12

    嗯。谢谢。

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。