转自:http://www.cnblogs.com/yimiao/archive/2012/07/15/2592645.html
今天开始阅读discuz2.5的源码,这是发现的一些收获,记录一下。有兴趣的同学可以去试试
- CREATE TABLE pre_forum_post (
- pid int(10) unsigned NOT NULL COMMENT '帖子id',
- fid mediumint(8) unsigned NOT NULL default '0' COMMENT '论坛id',
- tid mediumint(8) unsigned NOT NULL default '0' COMMENT '主题id',
- `first` tinyint(1) NOT NULL default '0' COMMENT '是否是首贴',
- author varchar(15) NOT NULL default COMMENT '作者姓名',
- authorid mediumint(8) unsigned NOT NULL default '0' COMMENT '作者id',
- `subject` varchar(80) NOT NULL default COMMENT '标题',
- dateline int(10) unsigned NOT NULL default '0' COMMENT '发表时间',
- message mediumtext NOT NULL COMMENT '消息',
- useip varchar(15) NOT NULL default COMMENT '发帖者IP',
- invisible tinyint(1) NOT NULL default '0' COMMENT '是否通过审核',
- anonymous tinyint(1) NOT NULL default '0' COMMENT '是否匿名',
- usesig tinyint(1) NOT NULL default '0' COMMENT '是否启用签名',
- htmlon tinyint(1) NOT NULL default '0' COMMENT '是否允许HTML',
- bbcodeoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭BBCODE',
- smileyoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭表情',
- parseurloff tinyint(1) NOT NULL default '0' COMMENT '是否允许粘贴URL',
- attachment tinyint(1) NOT NULL default '0' COMMENT '附件',
- rate smallint(6) NOT NULL default '0' COMMENT '评分分数',
- ratetimes tinyint(3) unsigned NOT NULL default '0' COMMENT '评分次数',
- `status` int(10) NOT NULL default '0' COMMENT '帖子状态',
- tags varchar(255) NOT NULL default '0' COMMENT '新增字段,用于存放tag',
- `comment` tinyint(1) NOT NULL default '0' COMMENT '是否存在点评',
- replycredit int(10) NOT NULL default '0' COMMENT '回帖获得积分记录',
- `position` int(8) unsigned NOT NULL auto_increment COMMENT '帖子位置信息',
- PRIMARY KEY (tid, `position`),
- KEY fid (fid),
- KEY authorid (authorid,invisible),
- KEY dateline (dateline),
- KEY invisible (invisible),
- KEY displayorder (tid,invisible,dateline),
- KEY `first` (tid,`first`),
- UNIQUE KEY pid (pid)
- ) ENGINE=MyISAM COMMENT='帖子表';
这是discuz的post表,以前虽然玩过dz,但是没有仔细看过源码。
大家注意下这个表的primary key,这样设置,如果插入数据,效果是这样的,同样的tid,position是自增的,这样就很好的解决了楼层,不在需要进行计算了。
自己测试几条数据,证明确实有上述的效果。
- mysql> select * from pre_forum_post;
- +-----+-----+----------+
- | pid | tid | position |
- +-----+-----+----------+
- | 1 | 1 | 1 |
- | 2 | 1 | 2 |
- | 3 | 2 | 1 |
- +-----+-----+----------+
- rows in set (0.00 sec)
帖子的pid应该也是一个自增的字段,dz里面是这样解决的:
- CREATE TABLE pre_forum_post_tableid (
- `pid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Post ID',
- PRIMARY KEY (`pid`)
- ) ENGINE=MyISAM COMMENT='post分表协调表';
往这个表里插入一个null,返回的pid作为帖子的pid
$pid = C::t('forum_post_tableid')->insert(array('pid' => null), true);
$data = array_merge($data, array('pid' => $pid));